如果用户输入未经修改就插入到SQL查询中,那么应用程序就容易受到SQL注入的影响,如下面的示例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");这是因为用户可以输入类似于value');DROP;--,然后查询变成:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')怎样才能防止这种情况发生呢?
发布于 2016-07-14 06:05:35
这里您需要做的绝对最小值是转义该变量:
$unsafe_variable = mysql_real_escape_string($_POST['user_input']);在这一点上,查询中没有任何东西需要更改。不过,这并不一定是故事的结尾,因为mysql_real_escape_string并不是无懈可击的,而且您仍然暴露在那些使用更复杂技术的人的注入攻击中。
整个PHP已经被破坏,它已经过时,最新版本的mysql_query不再支持它。您需要继续做一些更好的事情,我建议将PDO作为基线。
确保您做得对的最好方法是使用准备好的语句和占位符值。您的查询如下所示:
INSERT INTO table name (column1) VALUES (:column1)使用PDO,您可以命名占位符。这使得以后执行语句非常容易,只需匹配以下值:
$stmt->execute(array('column1' => $_POST['user_input'));因此,避免注入错误的最好方法是首先避免注入。占位符值将被正确、安全、最重要的一致替换。它所需要做的是一个错误,你认为你逃脱了一些东西,但你没有,人们可以全面关闭你的网站。
https://stackoverflow.com/questions/38366397
复制相似问题