-1

MySQL テーブルに 0 または 1 の列があります。ユーザーが 0 または 1 を入力しない場合は、値を 0 に設定します。この PHP コードが SQL インジェクションから「安全」であるかどうか疑問に思っていました。 :

$flag = $_GET["f"];
if ($flag != 1) $flag = 0;
$sql = "SELECT * from table WHERE column=$flag";
$db->query($sql);

私は通常、準備済みステートメントを使用しますが、このコードが完全に証明されているかどうか疑問に思っていました。これが壊れる可能性がある場合は、例を見てみたいと思います。

4

1 に答える 1

3

いいえ、安全ではありません。SQL インジェクションの例:1 OR 1 = 1

これは 1 に等しいです(int)"1string" === 1

(int)クエリに渡す前に明示的にキャストすることを検討します。

$sql = "SELECT * from table WHERE column=".(int)$flag;
于 2013-07-26T23:32:06.660 に答える