php - 使用MySQL重新进行SQL注入(inject)攻击,基线要求是什么?

标签 php mysql security mysqli sql-injection

在当前项目中使用MySQL。查看mysqli函数,发现它们很难使用。我认为,使用该库的任何程序员都应获得荣誉勋章。

三个问题:


mysqli不处理NULL或诸如CURRENT_DATE之类的函数
无法对带有随机WHERE子句的查询使用参数化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或普通用户访问。

最佳答案

这段代码像筛子一样漏水。
您正在一个看不见mysql_query的函数中调用mysql_real_escape_string()
您正在其他功能中使用PDO。
这是一团糟,没有道理。
如果您知道如何使用PDO,请使用它。
这样您就安全了。

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

关于php - 使用MySQL重新进行SQL注入(inject)攻击,基线要求是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401852/

相关文章:

php - 如何创建sql文件?

python - 在 CPython 中编译不受信任的代码是否安全?

javascript - 如何从 php 文件接收的 JSON 中检索对象?

mysql - Grails 删除孤儿多对多关系

php - MYSQL查询执行时间

javascript - 相对较好的向服务器发送数据的javascript安全机制

c++ - 在沙盒环境中运行程序时如何禁止系统调用?

php - Cakephp 和 Laravel 共存

php - 子表达式(正则表达式)的无限匹配仅返回一个匹配项

php - 没有创建数据库的 Symfony 2.7 应用程序