【问题标题】:Mysql and php fixes to replicate PDO securityMysql 和 php 修复以复制 PDO 安全性
【发布时间】:2013-05-14 02:27:00
【问题描述】:

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

这两点就够了吗?

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

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

【问题讨论】:

标签: php security validation pdo sanitization


【解决方案1】:

简短版本:从 mysql 扩展转移到 mysqli extension,并将带参数的查询替换为预准备语句 (here is a quickstart guide)。

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

附注:

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

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

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

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

【讨论】:

  • 好的,我正在切换到使用 PDO。然而,真正帮助我调试应用程序的方法之一是在开发过程中回显我的查询,就像echo "The sql: ". $sql; 。通过使用 PDO,我可以不再拥有这种便利吗?我们如何才能呼出准备好的声明?
猜你喜欢
  • 2017-11-10
  • 2012-07-12
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多