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 インジェクションを防ぐために addslashes に依存していますが、中国語での SQL インジェクションを防ぐためのチェックを強化することをすべての人に推奨します。 addslashes の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できることですが、addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効なマルチバイト文字となる 0xbf5c は依然として単一引用符とみなされ、そのため addslashes は正常にインターセプトできません。
もちろん、addslashes はマルチバイト文字の処理に使用されます。mysql_real_escape_string を使用します。
さらに、php マニュアルの get_magic_quotes_gpc の例:
if (!get_magic_quotes_gpc()) {
$lastname = addedlashes($_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) でのみ使用できます。それ以外の場合は、mysql_escape_string のみを使用できます。この 2 つの違いは、mysql_real_escape_string は接続の現在の文字セットを考慮するのに対し、mysql_escape_string は考慮しないことです。
要約すると:
* addslashes() は強制的な追加です。
* mysql_real_escape_string() は文字セットを決定しますが、PHP バージョンの要件があります;* mysql_escape_string は接続の現在の文字セットを考慮しません。
dz での SQL インジェクションを防ぐには、addslashes 関数を使用し、dthmlspecialchars 関数でいくつかの置換を実行します $string = preg_replace(/&(((((d{3,5}x[a-fA-F0-9]{ 4 }));)/, &1, この置換により、インジェクションの問題が解決され、中国語の文字化けに関するいくつかの問題も解決されます