ホームページ >バックエンド開発 >PHPチュートリアル >いくつかの SQL インジェクション攻撃対策機能の違い
SQL インジェクション攻撃は、ハッカーが Web サイトを攻撃するために使用する最も一般的な方法です。サイトで厳密なユーザー入力検証が使用されていない場合、SQL インジェクション攻撃に対して脆弱になることがよくあります。 SQL インジェクション攻撃は通常、不正なデータやクエリ ステートメントをサイト データベースに送信することによって実行され、データベース内のレコードが公開、変更、または削除される可能性があります。
SQL インジェクション攻撃を防ぐために、PHP には入力文字列を処理し、下位レベルで入力に対して事前のセキュリティ処理を実行できる関数、つまり Magic Quote が付属しています。 (php.ini magic_quotes_gpc)。 magic_quotes_gpc オプションが有効な場合、入力文字列内の単一引用符、二重引用符、およびその他の文字の前にバックスラッシュ / が自動的に付けられます。
しかし、Magic Quotes はあまり普遍的なソリューションではなく、潜在的に危険な文字をすべてブロックするわけではなく、多くのサーバーでは Magic Quotes が有効になっていません。したがって、SQL インジェクションを防ぐために、他のさまざまな方法も使用する必要があります。
多くのデータベースは、この入力データ処理機能をネイティブに提供します。たとえば、PHP の MySQL 操作関数には、addslashes()、mysql_real_escape_string()、mysql_escape_string() およびその他の関数が含まれており、特殊文字やデータベース操作エラーの原因となる可能性のある文字をエスケープできます。それでは、これら 3 つの機能の違いは何でしょうか?以下で詳しく説明しましょう。
国内の PHP プログラマーの多くは SQL インジェクションを防ぐために依然としてアドスラッシュに依存していますが、中国語での SQL インジェクションを防ぐためのチェックを強化することをお勧めします。 addslashes の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できるのに対し、addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効なマルチバイト文字になります。0xbf5c は依然として単一引用符とみなされ、そのため addslashes は正常にインターセプトできません。
もちろん、addslashes は役に立たないわけではなく、シングルバイト文字列の処理に使用されます。マルチバイト文字の場合は、mysql_real_escape_string を使用します。
さらに、PHP マニュアルの get_magic_quotes_gpc の例:
if (!get_magic_quotes_gpc()) { $lastname = addslashes($_POST[‘lastname’]); } else { $lastname = $_POST[‘lastname’]; }
magic_quotes_gpc がすでに開いているときに $_POST['lastname'] を確認するのが最善です。
2 つの関数 mysql_real_escape_string と mysql_escape_string の違いについて説明します。
mysql_real_escape_string は (PHP 4 >= 4.3.0、PHP 5) で使用する必要があります。 2 つの違いは、mysql_real_escape_string は接続の現在の文字セットを考慮するのに対し、mysql_escape_string は考慮しないことです。
要約:
*addslashes() は /;
* を強制的に追加します。mysql_real_escape_string() は文字セットを決定しますが、PHP の要件があります。 version;
* mysql_escape_string は接続の現在の文字セットを考慮しません。
dz での SQL インジェクションを防ぐには、addslashes 関数を使用し、dthmlspecialchars 関数でいくつかの置換を実行します $string = preg_replace('/&(((((/d{3,5}|x [ a-fA-F0-9]{4}));)/'、'&//1'、この置換によりインジェクションの問題が解決され、中国語の文字化けに関するいくつかの問題も解決されます
推奨学習: PHP ビデオ チュートリアル #
以上がいくつかの SQL インジェクション攻撃対策機能の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。