ホームページ  >  記事  >  バックエンド開発  >  addlashes や他のスペースをクリアする方法は安全ではありません、addslashes space_PHP チュートリアル

addlashes や他のスペースをクリアする方法は安全ではありません、addslashes space_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:08778ブラウズ

addslashes やその他のスペースを消去する方法は安全ではありません。Addslashes

は、文字に非常に多くのスペースが含まれているため、安全ではありません。たとえば、「addslashes」の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できることです。 、addslashes は 0xbf27 を 0xbf5c27 に変更するだけですが、これは有効なマルチバイト文字になります。0xbf5c は依然として単一引用符とみなされます。そのため、addslashes は正常にインターセプトできません。

実際には、これはデータベースの SQL 問題であり、ソース データベース自体から解決する必要があります。ただし、一部のデータベースでは対応するメソッドが提供されています。

------------------------------------------------- -

S PHP のいくつかの SQL インジェクション攻撃対策機能の違い

2010-12-24 13:09:22

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/1099424.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1099424.html技術記事 addslashes やその他のスペースをクリアする方法は安全ではありません。addslashes は、「addslash...」などの文字に非常に多くのスペースが含まれているため、安全ではありません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。