SQL インジェクションは、攻撃者の SQL クエリに悪意のある入力を挿入することでアプリケーションのセキュリティ検証をバイパスする一般的な攻撃手法です。このタイプの攻撃は、PHP が広く使用されているプログラミング言語である Web アプリケーションでよく見られます。 PHP では、アプリケーション プログラマは次の手法を使用して SQL インジェクションを防ぐことができます。
PHP は、SQL インジェクションを防ぐ安全な方法であるプリペアド ステートメントと呼ばれるテクノロジを提供します。プリペアド ステートメントは、SQL クエリを実行する前にクエリ文字列とクエリ パラメータを分離する手法です。この手法を使用すると、攻撃者は悪意のあるコードをクエリ パラメーターに挿入できなくなり、アプリケーションを攻撃から保護できます。次にプリペアド ステートメントの例を示します。
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute();
この例では、SQL クエリ文字列は「SELECT * FROM users WHERE username = ? AND password = ?」で、$username と $password はプリペアド ステートメントのパラメータです。 。 bind_param() 関数は、準備されたステートメントのパラメータに変数をバインドするために使用されます。こうすることで、どのようなパラメータが入力されても無視され、クエリに安全に渡されます。
入力検証は、SQL インジェクションを防ぐ強力な手段です。これは、ユーザー入力データをチェックして、予期されるタイプ、形式、長さに一致することを確認する手法です。 PHP では、正規表現またはフィルター関数を使用して入力を検証できます。例:
if (!preg_match("/^[a-zA-Z0-9]{8,}$/", $password)) { echo "Invalid password format"; exit; }
この例では、preg_match() 関数は正規表現を使用してパスワード形式が有効かどうかを確認します。無効な場合、プログラムはエラー メッセージを表示して終了します。
PHP では、mysqli_real_escape_string() 関数または addslashes() 関数を使用してユーザー入力をエスケープできます。これらの関数は、SQL インジェクション攻撃を回避するために、一重引用符や二重引用符などの特殊文字をエスケープ文字に変換します。例:
$username = mysqli_real_escape_string($mysqli, $_POST['username']); $password = mysqli_real_escape_string($mysqli, $_POST['password']); or $username = addslashes($_POST['username']); $password = addslashes($_POST['password']);
この例では、mysqli_real_escape_string() 関数を使用して、$post['username'] および $post['password'] 入力値をエスケープします。バックスラッシュ文字は、SQL クエリ内で一重引用符または二重引用符が閉じ引用符として解釈されるのを防ぎます。 addslashes() 関数も同様のタスクを実行し、特殊文字をエスケープします。
つまり、SQL インジェクション攻撃を防ぐには、プログラマはプリペアド ステートメント、入力検証、およびエスケープ手法を使用する必要があります。これらの技術により、攻撃者が悪用できる脆弱性や欠陥を軽減できます。同時に、アプリケーション開発者は、アプリケーションのセキュリティを向上させるために、SQL インジェクションの一般的な攻撃方法を理解する必要があります。
以上がSQLインジェクションを防ぐためのPHP実装スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。