Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止sql注入?无需修改为SQL查询_Php_Mysql_Database - Fatal编程技术网

Php 如何防止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

如果未经修改就将用户输入插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示:

$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'));
因此,避免注入错误的最佳方法是首先避免注入。占位符值将被正确、安全且最重要的一致替换。只需要一个错误,你以为你逃过了什么,但你没有,人们可以把你的网站砸开