3

我知道使用 PDO 使 SQL 注入几乎不可能。但是,我目前没有时间更改我们网站中所有与数据库相关的代码。(特别是因为我是 PDO 的新手,所以涉及到一些学习曲线)。所以我想知道哪些 mysql/php 函数会提供与 PDO 相同的安全性。

这两点就够了吗?

  1. 确保所有 $_GET 和 $_POST 数据都是预期的类型(例如产品 ID 只能是数字,所以我可以使用is_numeric)。
  2. 使用mysql_real_escape_string.

或者还有什么我应该做的吗?网站的方式是,基于id=x查询字符串,事情可能会进入数据库。我在黑客攻击后看到的是,在数据库中,所有可以通过查询字符串进入数据库的东西都被cd etc/pwd.

4

1 回答 1

3

简短版本:从 mysql 扩展转移到mysqli 扩展,并将带参数的查询替换为准备好的语句(这里是快速入门指南)。

但从长远来看,现在学习 PDO 不会花费那么长时间,而且值得付出努力。

作为旁注:

我知道使用 PDO 使 SQL 注入几乎不可能。

这不是真的,可以在 PDO 中编写可注入查询。PDO 中的这段代码与旧的 mysql 扩展中的代码一样糟糕(这里有两个漏洞向量,一个价格!):

$pdo_obj->query("SELECT password FROM users WHERE id = '".$_GET['id']."'");

PDO 仅提供保护您自己并使它们易于使用的工具。你总是,总是必须自己负责验证和过滤输入。但是使用准备好的语句,您至少可以让数据库知道什么应该是参数,什么应该是查询的一部分。

于 2013-05-19T12:16:12.617 回答