这是SQL注入预防的好方法

时间:2015-03-27 16:45:44

标签: javascript php mysql pdo sql-injection

我在这里已经阅读了很多关于如何在其他网站和论坛上阻止SQL注入的内容。唯一的问题就是这让我在将内容写入数据库时​​如何保护您的网站时非常困惑。

我正在创建作为schol项目的东西,其中有很多来自用户的输入将被写入数据库,我现在通过javascript检查它们是否包含iligal char。然后我使用ajax激活我的控制器,使用我的模型中的查询将其发送回视图。

但是让我们继续讨论我的问题。

如果我首先使用javascript(客户端)验证输入,然后使用PHP验证服务器端。如果我首先检查php是否输入包含像*'' ``> <,那种事情。您在查询中用于从数据库中获取信息的内容。然后逃避白人问题,因为我不希望在用户输入的网站上有空格。

然后在输入上使用mysqli_real_escape_string()。然后将其发送到看起来像这样的查询。

/**
* @param string
* @param string
* @return mixed
*/
public function updateUsername($oldUsername, $newUsername) {
    return $this->_db->query("UPDATE `users` SET `username` = :new_username WHERE `username` = :old_username",
        [':new_username' => $newUsername,':old_username' => $oldUsername]);
}

所以 1>使用javascript检查 2>通过php检查char就像*< > ' #
3>使用mysqli_real_escape_string()
4>到PDO查询

这是防止SQL注入的好方法,我真的不想用SQL注入实时发送我的学校项目哈哈。

格尔茨,

还要感谢阅读我的长篇故事

1 个答案:

答案 0 :(得分:2)

  1. 否。禁止使用角色会阻止人们使用它们,并且通常有正当理由使用它们。如果字符出现在数据中没有任何意义,那么您可以过滤它们以帮助保持数据正常。不要将其作为安全措施。
  2. 同上
  3. 否。参数化查询更好。
  4. 是的,但不能与mysqli_real_escape_string结合使用,因为您不应该混用API,如果您同时使用这两种API,那么 double 会转义并放入\个字符你的数据。