SQL インジェクション: Web フォームの送信に SQL コマンドを挿入したり、ページ リクエストのドメイン名やクエリ文字列を入力したりすることで、最終的にはサーバーをだまして悪意のある SQL コマンドを実行させます。
# プリペアド ステートメントは、パラメーター値の送信後にさまざまなプロトコルが使用され、データの正当性が保証されるため、SQL インジェクションに非常に役立ちます。前処理は、実行する SQL のコンパイルされたテンプレートとして認識され、変数パラメーターを使用してカスタマイズできます。 (推奨学習: PHP ビデオ チュートリアル)
防御方法 1
##mysql_real_escape_string – SQL ステートメントの特殊文字で使用される文字列をエスケープします。接続の現在の文字セット !
$sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_real_escape_string($pw)."' limit 1";
方法 2:
magic_quotes_gpc を開いて SQL インジェクションを防止します。 php.ini には、magic_quotes_gpc =Off という設定があります。これはデフォルトではオフになっています。オンにすると、' を ' に変換するなど、ユーザーが送信したクエリが自動的に SQL に変換されます。 SQL インジェクションを防ぐためなど、すべての違いが生じます。 magic_quotes_gpc=Off の場合は、addslashes() 関数を使用します。方法 3:
カスタム関数function check_param($value=null) { #select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile $str = 'select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile'; if(!$value) { exit('没有参数!'); }elseif(eregi($str, $value)) { exit('参数非法!'); } return true; } function str_check( $value ) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); return $value; } function post_check($value) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); $value = nl2br($value); $value = htmlspecialchars($value); return $value; }
以上がPHP アンチ SQL インジェクションの原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。