ホームページ >バックエンド開発 >PHPチュートリアル >PHP 言語開発における SQL インジェクション攻撃を防ぐにはどうすればよいですか?

PHP 言語開発における SQL インジェクション攻撃を防ぐにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-10 21:43:361211ブラウズ

Web サイト開発のプロセスにおいて、SQL インジェクション攻撃は一般的なセキュリティ脆弱性であり、攻撃者が Web サイトの機密データを取得したり、悪意を持って SQL コードを挿入して Web サイトを制御したりすることができます。バックエンド言語としてよく使われるPHPについて、PHP言語開発におけるSQLインジェクション攻撃を防ぐ方法を紹介します。

  1. パラメータ化されたクエリの使用
    パラメータ化されたクエリは、プレースホルダを使用する SQL ステートメントです。データは、プリコンパイル段階を通じてプレースホルダから分離されるため、SQL ステートメントのセキュリティが向上します。 PHP では、PDO (PHP Data Objects) 拡張機能によって提供されるプリペアド ステートメントを使用して、パラメーター化されたクエリを実装できます。例:
// 创建PDO对象
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "password");

// 创建预处理语句对象
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");

// 绑定参数
$username = $_POST['username'];
$password = $_POST['password'];
$stmt->bindParam(":username", $username);
$stmt->bindParam(":password", $password);

// 执行语句
$stmt->execute();

プレースホルダーとバインド パラメーターを通じて、SQL インジェクション攻撃によって引き起こされるセキュリティ問題を回避できます。

  1. 入力データのフィルタリングとエスケープ
    ユーザー入力データを処理するときは、悪意のあるスクリプトやコードの挿入を避けるために、データをフィルタリングしてエスケープする必要があります。 PHP では、データのフィルタリングとエスケープに組み込み関数を使用できます。例:
// 过滤输入的字符串
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);

// 转义输入的字符串
$username = mysqli_real_escape_string($connection, $_POST['username']);

このうち、FILTER_SANITIZE_STRING 関数は文字列内のラベルと特殊文字をフィルタリングし、mysqli_real_escape_string 関数は特殊文字をフィルタリングします。入力データのエスケープで。

  1. 入力データの検証
    入力データの検証は、不正な文字の入力や制限を超える入力長など、悪意のあるユーザーによる攻撃を回避するための非常に重要な手順です。 PHP では、正規表現とフィルター関数を使用して入力データを検証できます。例:
// 验证邮箱地址
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    echo "Email is not valid";
}

// 验证手机号
if (!preg_match("/^[0-9]{11}$/", $_POST['phone'])) {
    echo "Phone number is not valid";
}

データ検証を実行するときは、データが正しいことを確認するために、特定の入力データに対して特定の検証を実行する必要があります。合法的、セックス。

  1. データベース権限を最小限に抑える
    データベース権限を最小限に抑えることは、SQL インジェクション攻撃を軽減するための重要な手段の 1 つです。データベースを構成するときは、必要に応じて最小限のデータベース権限を付与する必要があります。たとえば、データのクエリ、挿入、更新の権限のみを付与し、データの削除やテーブル構造の変更は避けてください。データベース操作を実行するときは、付与された最小限の権限を使用するだけで済み、SQL インジェクション攻撃の脅威を効果的に軽減できます。

要約すると、PHP 言語開発における SQL インジェクション攻撃を防ぐ方法には、パラメータ化されたクエリの使用、入力データのフィルタリングとエスケープ、入力データの検証、データベース権限の最小化などが含まれます。開発者はセキュリティ意識を強化し、Web サイトのセキュリティを確保するための効果的な対策を講じる必要があります。

以上がPHP 言語開発における SQL インジェクション攻撃を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。