清理$ _GET数据 - PHP

时间:2015-07-03 19:51:17

标签: php

我希望获得并使用0到10之间的整数作为$_GET变量。像这样:http://example.com?id=5

清洁$_GET['id']就足够了......

if(isset($_GET['id'])){
    $id_test = (int)$_GET['id']; //Use the integer version of the input.

    if($id_test > 0 && $id_test <= 10) { //Make sure the integer version of the incoming $_GET['id'] is in the acceptable range.
        $id = $id_test;
    } else {
        echo 'Invalid entry';
        exit;
    }

    //Now use $id to update MySQL database, etc.
}

不能做$id_test = (int)$_GET['id'];呈现任何恶意的用户提交的代码(比如丢弃一张桌子)没用吗?这是否适用于我没想过的其他攻击?

感谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,转换为int应该足够了,但请记住,这并不意味着您不应该使用预准备语句 - 将变量强制转换为int AND 使用预准备语句(如果适用)。

答案 1 :(得分:0)

此处的解决方案:filter_var with FILTER_VALIDATE_INT(http://php.net/manual/en/function.filter-var.php

if(!array_key_exists('id',$_GET) || false===filter_var($_GET['id'],FILTER_VALIDATE_INT,array('options'=>array('min_range'=>0,'max_range'=>10))))
{echo "invalid entry.";exit;}

你的建议只是将它转换为int,当$ _GET [&#39; id&#39;] =&#34;小狗&#34;时,会给出0的结果。或类似的。另请注意,filter_var有时可能会返回int 0,当它返回0时,它将是&#34;有点像false&#34;与类型杂耍,所以使用===,而不是==这里。