ホームページ >バックエンド開発 >PHPチュートリアル >SQL インジェクションを防ぐための PHP 関数の概要_PHP チュートリアル
具体的な使い方
スラッシュを追加すると SQL インジェクションが防止されます
国内の多くのPHPプログラマは未だにSQLインジェクションを防ぐためにaddslashesに依存していますが、中国語でのSQLインジェクションを防ぐために全員がチェックを強化することをお勧めします。 addslashes の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できることですが、addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効なマルチバイト文字となる 0xbf5c は依然として単一引用符とみなされ、そのため addslashes は正常にインターセプトできません。
もちろん、addslashes は役に立たないわけではありません。マルチバイト文字の場合は、mysql_real_escape_string を使用します。
さらに、phpマニュアルのget_magic_quotes_gpcについては
例:
コードは次のとおりです | |
または
関数 inject_check($sql_str) |
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
この関数は、unescaped_string 内の特殊文字をエスケープし、接続の現在の文字セットを考慮するため、mysql_query() で安全に使用できます。
注: mysql_real_escape_string() は % と _ をエスケープしません。
mysql_real_escape_string
例#1 mysql_real_escape_string() の例
コードは次のとおりです | |
$item = "ザックとデリックのラップトップ" ; 上記の例では、次の出力が生成されます: エスケープ文字列: ザックとデリックのラップトップ |
mysql_escape_string
この関数は、mysql_query() で安全に使用できるように、unescaped_string をエスケープします。
注: mysql_escape_string() は % と _ をエスケープしません。
この関数は、mysql_real_escape_string() が接続ハンドルを受け入れ、現在の文字セットに従って文字列を転送することを除いて、mysql_real_escape_string() とまったく同じです。 mysql_escape_string() は接続パラメータを受け入れず、現在の文字セット設定を気にしません。
例1. mysql_escape_string()の例
コードは次のとおりです | |
$item = "ザックのラップトップ"; |
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 は考慮しないことです。
総合的に判断して対処することができます
コードは次のとおりです | |
関数 cleanuserinput($dirty){ if (get_magic_quotes_gpc()) { $clean = mysql_real_escape_string(ストリップスラッシュ($dirty)); }その他{ $clean = mysql_real_escape_string($dirty); } $clean を返します; } |
*addslashes() は強制的に追加されます
* mysql_real_escape_string() は文字セットを決定しますが、PHP バージョンの要件があります;
* mysql_escape_string は接続の現在の文字セットを考慮しません。
http://www.bkjia.com/PHPjc/372028.html