0

SQL インジェクションについては、それをブロックするプロセス以外は何も知りません。

攻撃者が私の準備されたステートメントを次のように変更するかどうか疑問に思っていました:

$DB = $Con->prepare("SELECT * FROM Test WHERE username=?");

$DB->bind_param('s',$Username);

$DB->execute();

そして、彼が入力した彼の声明は次のとおりです。

x' DROP TABLE Test

bind/prepared ステートメントはこの要求をどのように処理しますか?

エラーを返しますか、それとも続行しますか? bind_param上記のSQLステートメントに特定の値をリンクするように?

4

3 に答える 3

1

いいえ、データベースは のユーザー名を持つレコードを検索するだけなx' DROP TABLE Testので、結果セットが空になる可能性があります。

于 2013-01-11T02:13:11.927 に答える
0

ステートメントを準備すると、プリコンパイルされます。したがって、バインドするパラメーターは生データとして送信され、SQLステートメントを変更することはできません。

あなたの例はうまくいきます、それはユーザー名を持つすべての行を選択しますx' DROP TABLE Test

于 2013-01-11T02:15:09.240 に答える
0

bind_param を使用すると、値がエスケープされます。データが正しいことを確認するためにデータを検証する必要がありますが、インジェクションから安全です

于 2013-01-11T02:11:56.443 に答える