1

私はこの行を持っています:

$sql = "UPDATE votes SET up=up+1 WHERE id='{$p}'";

今私が読んだことから、SQLインジェクションの1つの方法は、ハッカーが追加情報を追加できるようにするSQLクエリを適切に「閉じない」ことが原因です。

だから私の質問は、私にとってその行はup=up+1「閉じられていない」ので安全ですが、このように設定up='up+1'すると「閉じられる」ようになり、機能しません。

行アップタイプはint(11)、それが違いを生む場合です。

アップデート:

$p関数でサニタイズされます

function sanitize($foo) { 
if(get_magic_quotes_gpc() == true) { 
 $foo = stripslashes($foo); 
} 
return mysql_real_escape_string(htmlspecialchars($foo)); 
}
4

2 に答える 2

4

up=up+1、変数を介したユーザー入力を受け入れないため、脆弱ではありません。INTデータベースにすでにある値を増やしているだけです。

ただし、変数が適切にフィルタリングおよびエスケープされていない場合、脆弱である可能性がありますが、上で追加したように、関数によってサニタイズされていますWHERE id='{$p}' $pうまくいけば、サニタイズ関数は、変数の適切な型 (int や string など) をチェックし、適切な範囲をチェックします。

いつものように、最も安全な方法は、変数を直接 SQL 文字列に渡すのではなく、準備されたステートメントとパラメーター化されたクエリを利用することです。さまざまな RDBMS 用に PHP で使用できるデータベース API のほとんどは、プリペアド ステートメントをサポートしています。(ただし、特に関数ではありませんmysql_*())。

于 2012-05-11T01:47:49.417 に答える