在当前项目中使用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/