ホームページ >バックエンド開発 >PHPチュートリアル >PHP SQLインジェクションの脆弱性と防止策
PHP SQL インジェクションの脆弱性とは何ですか?
多くの Web サイトの開発では、PHP と MySQL を使用することが最も一般的なソリューションです。 PHP は移植性が高く使いやすいですが、MySQL も完全に無料のデータベースであり、これらを組み合わせることで、さまざまな機能を備えた Web サイトを迅速かつ簡単に開発できます。
ただし、PHP と MySQL を開発に使用する場合、SQL インジェクションの脆弱性という潜在的なセキュリティ リスクがあることに注意してください。
SQL インジェクションの脆弱性とは、攻撃者が Web サイトの脆弱性を利用して、意図しない SQL ステートメントを元の SQL ステートメントにつなぎ合わせ、データベースにデータを保存、削除、または変更させる行為を指します。この方法を通じて、攻撃者はアカウントのパスワード、銀行カード情報、ユーザー権限など、データベース内の多くの機密情報を取得する可能性があります。
PHP SQL インジェクションの脆弱性はなぜ発生するのでしょうか?
SQL インジェクションの脆弱性について詳しく学ぶ前に、まず PHP プログラミング言語の使用方法を理解する必要があります。
PHP プログラムを使用してデータベースを操作する前に、通常は接続する必要があります。データベースに接続し、接続オブジェクトを生成します。 PHP では、アプリケーションが独自に SQL ステートメントを生成できない場合、mysql_query() や mysqli_query() などの PHP が提供する関数を使用する必要があります。形式は次のとおりです。
mysqli_query(connection, query);
このうち、connection は接続オブジェクト、query は SQL クエリ ステートメントです。
問題の根本は、PHP の mysqli_query() 関数が SQL ステートメントを厳密にチェックしておらず、SQL ステートメントの構造もチェックしておらず、クエリ パラメーターが正しくフィルタリングされず、エスケープされていないことです。このとき、攻撃者がクエリパラメータに悪意のある SQL 文を追加すると、SQL コマンド全体のセマンティクスが変化し、攻撃が引き起こされます。
PHP SQL インジェクションの脆弱性を防ぐにはどうすればよいですか?
プリペアド ステートメントとは、実行する SQL ステートメントとクエリ パラメーターを結合するのではなく、プリペアド ステートメント オブジェクトを作成し、パラメーターを入力として受け取ることを意味します。このオブジェクトに。これにより、SQL インジェクション攻撃が回避されます。
以下はプリペアド ステートメントの例です。
$stmt = $conn -> prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt -> bind_param("ss", $username, $password); $stmt -> execute();
上記のコードでは、変数 $stmt に、作成されたプリペアド ステートメント オブジェクトが格納されます。クエリパラメータを変更するには、bind_param() 関数を使用することで、インジェクション攻撃を回避できます。
ユーザーが入力したデータを SQL ステートメントに追加する前に、データがデータの一部になることを避けるために、必ずデータを正しくフィルタリングしてエスケープしてください。悪意のあるSQLコマンド。
フィルタリング方法には、特殊文字の削除と置換、およびインジェクション攻撃の可能性を排除するための PHP 関数を使用した特殊文字のエスケープが含まれます。
以下はフィルタリングの例です:
$filtered_username =filter_var($username , FILTER_SANITIZE_STRING); $filtered_password = filter_var($password , FILTER_SANITIZE_STRING);
上記のコードの filter_var() 関数は、$username と $patssword から HTML タグと特殊文字を削除し、無害な文字列を返します。 。
SQL インジェクション攻撃により、アプリケーションがクラッシュすることがあります。この状況を回避するには、エラー メッセージを適切に処理する必要があります。
たとえば、アプリケーションをタイムリーに修正できるように、エラー メッセージをログに書き込んだり、管理者に電子メールを送信したりできます。
概要
PHP SQL インジェクションの脆弱性は、Web アプリケーションの一般的なセキュリティ脆弱性です。これを真剣に受け止め、攻撃やデータ侵害を避けるために適切な予防措置を講じる必要があります。上記の対策では SQL インジェクションの脆弱性を悪用するすべての攻撃を完全に防ぐことはできませんが、効率的で従来のフィルタリングおよび処理方法により攻撃のリスクを軽減し、ネットワーク セキュリティを効果的に保護できます。
以上がPHP SQLインジェクションの脆弱性と防止策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。