ホームページ  >  記事  >  バックエンド開発  >  php の追加スラッシュやスペースをクリアするその他の方法は安全ではありません_PHP チュートリアル

php の追加スラッシュやスペースをクリアするその他の方法は安全ではありません_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:21:36743ブラウズ

スペースをクリアする方法は、文字に非常に多くのスペースがあるため、安全ではありません。たとえば、「「addslashes」の問題は、ハッカーが一重引用符を 0xbf27 に置き換えることができることです。addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効な複数単語のセクション文字、その中の 0xbf5c は依然として一重引用符とみなされます。そのため、addslashes は " を正常にインターセプトできません。実際、これはデータベース SQL の問題をソース データベース自体から解決する必要がありますが、一部のデータベースでは、対応する方法しか提供されていません。

SQL インジェクション攻撃は、ハッカーが Web サイトを攻撃するために使用する最も一般的な方法です。サイトで厳密なユーザー入力検証が使用されていない場合、SQL インジェクション攻撃に対して脆弱になることがよくあります。 SQL インジェクション攻撃は通常、不正なデータやクエリ ステートメントをサイト データベースに送信することによって実行され、データベース内のレコードが公開、変更、または削除される可能性があります。

SQLインジェクション攻撃を防ぐために、PHPには入力文字列を処理し、下位レベルで入力に対して事前のセキュリティ処理を実行できる機能、つまりMagic Quotesが付属しています。 (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 インジェクションを防ぐために依然として addlashes に依存していますが、中国語での 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'、この置換によりインジェクションの問題が解決され、中国語の文字化けに関するいくつかの問題も解決されます。

http://www.bkjia.com/PHPjc/324904.html

tru​​ehttp://www.bkjia.com/PHPjc/324904.html技術記事スペースをクリアする方法は、文字にスペースが多すぎることもあり、安全ではありません。たとえば、「「addslashes の問題は、ハッカーが一重引用符を 0xbf27 に置き換えることができることです。addslashes は単に置き換えるだけです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。