How to prevent sql Injection? without modification into an SQL query
本问题已经有最佳答案,请猛点这里访问。
如果在不修改SQL查询的情况下插入用户输入,则应用程序容易受到SQL注入的攻击,如下例所示:
1 2 3 | $unsafe_variable = $_POST['user_input']; mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')"); |
这是因为用户可以输入类似于value');drop table table;--,查询变为:
1 | INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--') |
如何才能防止这种情况发生?
您在这里需要做的绝对最小值是转义该变量:
1 |
此时,查询中的任何内容都不必更改。不过,这不一定是故事的结尾,因为
整个
确保正确执行的最佳方法是使用带有占位符值的已准备语句。您的查询如下所示:
1 | INSERT INTO table name (column1) VALUES (:column1) |
通过PDO,您可以命名占位符。这使得以后执行语句非常容易,只需匹配以下值:
1 |
因此,避免注入错误的最佳方法是首先避免注入。占位符值将被正确、安全、最重要、一致地替换。只需要一个错误,你以为你逃脱了什么,但你没有,人们可以破坏你的网站全开。