我已经习惯了通过我的int函数过滤用户提交的变量,以确保它是一个数字(如果未返回0),并且不在mysql查询中引用该变量。
那是不好的做法吗?我认为出于性能方面的考虑,我决定这样做。另外,我一直认为数字不应该用引号引起来。
例子:
if($perpage != $user['perpage']){
if($perpage == 50 || $perpage == 100 || $perpage == 200 ){
$DB->query("UPDATE users SET perpage=$perpage WHERE id=$user[id]", __FILE__, __LINE__);
}
}
最佳答案
啊哈!一个有趣的案例!
strict_mode
设置,如果启用,则不允许您将数字伪装成字符串。 这是给您的引用,解释了此注入(inject):http://php.net/language.types.type-juggling
所以,我会让你的代码像这样
$perpage = intval($perpage);
if($perpage != $user['perpage'] && in_array($perpage,array(50,100,200) {
$DB->query("UPDATE users SET perpage=$perpage WHERE id=$user[id]");
}