Php 如何防止sql注入?无需修改为SQL查询
如果未经修改就将用户输入插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示:Php 如何防止sql注入?无需修改为SQL查询,php,mysql,database,Php,Mysql,Database,如果未经修改就将用户输入插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: $unsafe_variable = $_POST['user_input']; mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')"); 这是因为用户可以输入类似“值”);放置表格;--,查询变成: INSERT INTO `table` (`column`) VALUES('value'); DRO
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
这是因为用户可以输入类似“值”);放置表格;--,查询变成:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
如何防止这种情况发生?这里需要做的最小绝对值是转义该变量:
$unsafe_variable = mysql_real_escape_string($_POST['user_input']);
此时,查询中的任何内容都不必更改。不过,这并不一定是故事的结尾,因为mysql\u real\u escape\u string
并不是无懈可击的,您仍然会受到使用更复杂技术的注入攻击
整个mysql\u查询
API已经废弃,最新版本的PHP不再支持它。你需要做一些更好的事情,我推荐PDO作为基线
确保正确操作的最佳方法是使用带有占位符值的准备语句。这就是您的查询,如下所示:
INSERT INTO table name (column1) VALUES (:column1)
使用PDO,您可以命名占位符。这使得以后执行语句非常容易,只需匹配以下值:
$stmt->execute(array('column1' => $_POST['user_input'));
因此,避免注入错误的最佳方法是首先避免注入。占位符值将被正确、安全且最重要的一致替换。只需要一个错误,你以为你逃过了什么,但你没有,人们可以把你的网站砸开