保護なしで、次の行があります。
$check = mysql_query("SELECT * FROM school_users WHERE username = '".$_POST['username']."'")or die(mysql_error());
私のphpで。このコードを挿入するにはどうすればよいですか? 私は他の多くのことを試しましたが、注射には何もうまくいかないようです. mysql_query にはこれに対する自動キャッチがありますか?
php.ini
オプションをチェックインします。SQL を簡単に挿入magic_quotes_gpc
するには、 に設定する必要があります。0
次に、コードの挿入を試みることができます。ブラウザーでRESTプラグインを使用して、それを実現できます。username
本体内の値として、たとえば次のように使用します。
username: "' OR 1=1; --"
これにより、次のようなクエリが生成されます。
SELECT * FROM school_users WHERE username = '' OR 1=1; --
これは常に真であり、school_users
テーブルからすべての行を返します。
例による SQL インジェクション攻撃を参照してください。これは PHP 固有のものではありませんが、さまざまな一般的な攻撃の例を示して説明しています..
「SQL インジェクション」は、検証されていない/サニタイズされていないユーザー入力の脆弱性のサブセット (「バッファ オーバーフロー」は別のサブセット) であり、アプリケーションが意図しない SQL コードを実行するよう説得することを目的としています。アプリケーションが単純にその場で SQL 文字列を作成して実行している場合、実際に驚きをもたらすのは簡単です。
他の人が指摘しているように、「マジック クォート」などの環境要因が影響を与える可能性がありますが、SQL インジェクションを軽減する唯一の信頼できる方法は、実証済みのコーディング プラクティスを使用することです。PHP で SQL インジェクションを防ぐにはどうすればよいですか? を参照してください。そのような攻撃を軽減するアプローチのために。