スペースをクリアする方法は、文字に非常に多くのスペースがあるため、安全ではありません。たとえば、「「addslashes」の問題は、ハッカーが一重引用符を 0xbf27 に置き換えることができることです。addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効な複数単語のセクション文字であっても、その中の 0xbf5c は一重引用符とみなされます。そのため、addslashes は "
を正常にインターセプトできません。特定のパラメーター要件に従って、それが int であるかどうかを確認するのが最善です。実際には、これはデータベースの SQL 問題であり、ソース データベース自体から解決する必要がありますが、一部のデータベースでは、対応する方法が提供されています。
SQL インジェクション攻撃が最も一般的です。ハッカーがウェブサイトを攻撃するために使用する手法。サイトで厳密なユーザー入力検証が使用されていない場合、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 =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) でのみ使用できます。それ以外の場合は、mysql_escape_string のみを使用できます。この 2 つの違いは、mysql_real_escape_string は接続の現在の文字セットを考慮するのに対し、mysql_escape_string は考慮しないことです。
要約すると、
*addlashes() は強制的な追加です。
* 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'、この置換によりインジェクションの問題が解決され、中国語の文字化けに関するいくつかの問題も解決されます。