如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
这是关于编程PHP时可能遇到的警告,错误和通知的一些答案,并且不知道如何修复.这也是社区Wiki,因此邀请每个人参与添加和维护此列表.
Stack Overflow上经常弹出诸如"已发送标头"或"调用非对象成员"之类的问题.这些问题的根本原因总是一样的.因此,这些问题的答案通常会重复,然后显示OP在他/她的特定情况下要改变哪一行.这些答案不会为网站添加任何价值,因为它们仅适用于OP的特定代码.具有相同错误的其他用户不能轻易地从中读取解决方案,因为它们过于本地化.这很难过,因为一旦你理解了根本原因,修复错误是微不足道的.因此,该列表试图以一般的方式解释解决方案.
如果您的问题已被标记为重复,请在下面找到您的错误消息并将修复程序应用于您的代码.答案通常包含进一步调查的链接,以防单独的一般答案不清楚.
如果您想贡献,请添加您的"收藏"错误消息,警告或通知,每个答案一个,简短说明它意味着什么(即使它只是突出显示其手册页的术语),可能的解决方案或调试方法和现有问答的清单.此外,随时改善任何现有的答案.
另外,请参阅