ホームページ  >  記事  >  バックエンド開発  >  PHP は組み込み関数分析により SQL インジェクションを防止します

PHP は組み込み関数分析により SQL インジェクションを防止します

WBOY
WBOYオリジナル
2016-07-29 09:14:59962ブラウズ

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 の例:

<code><span>if</span> (!get_magic_quotes_gpc()) {
    <span>$lastname</span> = addslashes(<span>$_POST</span>[‘lastname’]);
} <span>else</span> {
    <span>$lastname</span> = <span>$_POST</span>[‘lastname’];
}</code>

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'、この置換によりインジェクションの問題が解決され、中国語の文字化けに関するいくつかの問題も解決されます

http://ブログ.csdn.net/hellollx/article/details/5399760

以上、SQL インジェクションを防ぐための PHP 独自の関数の分析を内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。