0

こんにちは acunetix を使用して私のウェブサイトをテストしていますが、問題はこのスクリプトにありますhttp://boedesign.com/blog/2007/02/18/ajax-star-rating/

acunetixはメッセージを表示しませんが、ブラインドSQLをテストすると、次のような値を取得できます

8 and 1=0 --
8 and 31337-31337=0

rating_id mysql 列では、そこに数字のみを許可したいので、少し修正しましたが、最初の数字は 8 であるため、if を通過しました。どうすれば修正できますか? includes/rating_process.php にあるこのようなもの

// IF JAVASCRIPT IS ENABLED
if($_POST){
$id = escape($_POST['id']);
$rating = (int) $_POST['rating'];

if($rating <= 5 && $rating >= 1 && $id >= 1 && $id <=9999999){

if(@mysql_fetch_assoc(mysql_query("SELECT id FROM ratings WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND rating_id = '$id'")) || isset($_COOKIE['has_voted_'.$id])){

echo 'already_voted';  
} else {

そして、「// IF JAVASCRIPT IS DISABLED」でほぼ同じことを考えます

4

1 に答える 1

0

評価が整数でなければならないことがわかっている場合は、変数を整数としてキャストできます。

$rating = (int) $_POST['rating'] ;

変数でも同様に行うことができidます。

これにより、整数値のみを持つことが保証されます。

于 2009-12-22T15:47:54.767 に答える