ホームページ > バックエンド開発 > PHPチュートリアル > PHP セキュリティ保護: コード インジェクションの脆弱性を回避する

PHP セキュリティ保護: コード インジェクションの脆弱性を回避する

PHPz
リリース: 2023-06-24 12:14:02
オリジナル
1162 人が閲覧しました

ネットワーク技術の継続的な発展に伴い、PHP は広く普及した Web プログラミング言語として、ますます多くの人に使用されています。しかし、PHP 開発におけるコード インジェクションの脆弱性の問題は常にプログラマーを悩ませてきました。コード インジェクションの脆弱性は、攻撃者が悪意のあるコードとデータをアプリケーションに送信し、アプリケーションが意図しないアクションを実行したり、機密データが公開されたりするときに発生します。この記事では、この問題を回避するための PHP のセキュリティ保護について説明します。

1. パラメータ チェック

パラメータ チェックは、コード インジェクションの脆弱性を防ぐための基礎です。 PHP の開発プロセスでは、入力データをチェックする必要があります。関数フィルタリングを使用して入力パラメータをチェックしたり、正規表現を使用して入力パラメータをチェックしたりできます。パラメータをフィルタリングしてチェックすることにより、攻撃者が悪意のあるコードを入力してシス​​テムを攻撃することを防ぐことができます。

例:

$username = $_POST['username'];
$password = $_POST['password'];

if (!preg_match("/^[a-zA-Z0-9]{4,16}$/",$username)) {
    echo "用户名格式不正确";
} else if (!preg_match("/^[a-zA-Z0-9]{6,18}$/",$password)) {
    echo "密码格式不正确";
} else {
    //执行登录操作
}
ログイン後にコピー

2. SQL インジェクション

SQL インジェクションは、最も一般的なインジェクション攻撃手法の 1 つです。つまり、攻撃者は SQL ステートメントを入力パラメーターに挿入します。データベース内の機密データを取得するため。したがって、開発プロセス中は、SQL ステートメントをパラメータ化するか、パラメータを SQL ステートメントに直接接続する代わりに準備されたステートメントを使用する必要があります。

例:

$username = $_POST['username'];
$password = $_POST['password'];

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? and password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
ログイン後にコピー

3. XSS 攻撃

XSS 攻撃は、クロスサイト スクリプティング攻撃とも呼ばれ、一般的なネットワーク攻撃方法です。攻撃者はWebページに悪意のあるスクリプトコードを埋め込み、他のユーザーがWebページにアクセスするとそのコードが実行され、ユーザー情報の漏洩やWebページの改ざんが行われます。したがって、開発プロセス中に、入力コンテンツをフィルタリングし、htmlspecialchars 関数を使用して特殊文字をエスケープする必要があります。

例:

$name = $_POST['name'];
$message = $_POST['message'];

echo htmlspecialchars($name) . " said: " . htmlspecialchars($message);
ログイン後にコピー

4. ファイル アップロードの脆弱性

ファイル アップロードの脆弱性とは、攻撃者がファイル アップロード機能で悪意のあるファイルをサーバーにアップロードし、悪意のあるコードを実行することを意味します。 。したがって、ファイルのアップロード プロセス中に、ファイルの種類、サイズなどのファイルを確認し、悪意のあるファイルのアップロードを避けるために、アップロードされたファイルのディレクトリを読み取り専用に設定する必要があります。

例:

$allowed_extensions = array("jpg", "jpeg", "png", "gif");
$upload_max_size = 1024 * 1024;

$file = $_FILES['file'];

//检查文件大小
if ($file['size'] > $upload_max_size) {
    echo "文件过大";
}

//检查文件类型
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
if (!in_array($extension, $allowed_extensions)) {
    echo "文件类型不支持";
}

//上传文件
move_uploaded_file($file['tmp_name'], "/var/www/uploads" . uniqid() . "." . $extension);
ログイン後にコピー

5. セッション管理

セッション管理とは、ユーザーがログインした後のユーザー セッションのセキュリティを確保することを指します。攻撃者は、セッション情報を偽造したり、セッション ID を推測したりすることで、機密のユーザー情報を取得する可能性があります。そのため、セッション管理にはログイン時間の制限、ログイン回数の制限、SSLプロトコルの使用、Session CookieのHttpOnlyの設定などのセキュリティ管理が必要となります。

例:

session_start();

//设置Session Cookie HttpOnly
ini_set("session.cookie_httponly", 1);

//设置Session ID长度
ini_set("session.hash_bits_per_character", 6);

//限制登录时间
if ($_SESSION['last_active_time'] + 3600 < time()) {
    //退出登录
}

//限制登录次数
if ($_SESSION['login_failed_times'] > 3) {
    //退出登录
}
ログイン後にコピー

PHP 開発プロセスでは、上記の対策によりコード インジェクションの脆弱性を効果的に回避できます。開発者は、特定のニーズに応じて上記のセキュリティ対策を組み合わせて、PHP アプリケーションのセキュリティを向上させる必要があります。

以上がPHP セキュリティ保護: コード インジェクションの脆弱性を回避するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート