使用MySQL进行SQL注入攻击,基线要求是什么?

时间:2011-09-13 12:28:05

标签: php mysql security mysqli sql-injection

在使用MySQL的当前项目中。查看mysqli函数,发现它们非常难以使用。在我看来,任何使用图书馆的程序员都应该获得荣誉勋章。

三个问题:

  • mysqli不处理NULL或CURRENT_DATE等函数
  • 对于具有随机WHERE子句的查询,不可能使用paramterized SQL语句(那么如何防止SQL注入攻击呢?)
  • 在我看来,在复杂的情况下使用sqli是太多的工作(见链接)

PDO无法解决任何这些问题。问题是SQL注入:如果不使用参数化查询,PDO如何帮助SQL注入?

考虑到这一点,在PHP中为MySQL编写了一个小型库,可以简单有效地完成工作。见https://github.com/bangkok-maco/MySQL-sql-injection-prevention

(有人帮助将库替换为link,但请使用网站上的REAME进行介绍。)

问题是,我知道基本原则是否解决了需要解决的问题。

以下是原则:

  • 每个SELECT由没有DML(INSERT,UPDATE,DELETE)权限的用户执行
  • DML语句仅返回受影响的行数
  • 除了通过MySQL功能和程序
  • 之外,无法访问敏感数据
  • 影子用户,没有其他人可以执行这些功能而且没有其他权利
  • DML语句是参数化的; SELECT语句永远不会参数化

从逻辑上讲,这还够吗?

SQL注入可能导致非法的SELECT(可以简单地使用),但SELECT不能写入任何数据。 DML是参数化的,因此数据是标量的。敏感数据(例如密码)无法通过普通SQL或普通用户访问。

2 个答案:

答案 0 :(得分:3)

此代码与筛子一样漏洞 您在一个功能中调用了mysql_query,但看不到mysql_real_escape_string() 您正在另一个功能中使用PDO 这是一团糟,毫无意义。 如果您知道如何使用PDO,请使用它 那你就安全了。

如果您想使用mysql_query,则必须使用mysql_real_escape_string()

答案 1 :(得分:-1)

完全错误地提出了这个问题。重新发布了问题here