我已经习惯了通过我的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__);
}
}

最佳答案

啊哈!一个有趣的案例!

  • 您一般来说是正确的。最好将数字视为数字,而不是字符串
  • 它使您的代码更加合理和一致
  • 是mysql中的strict_mode设置,如果启用,则不允许您将数字伪装成字符串。
  • 但是您的实现实际上允许注入(inject)!让我们把它留给你的作业去找它:)

  • 这是给您的引用,解释了此注入(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]");
    }
    

    10-08 12:55