如果插入用户输入而不修改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)
可以采取哪些措施来防止这种情况发生?
在另一个问题中有评论说:
"当谈到数据库查询时,总是尝试使用准备好的参数化查询.mysqli和PDO库支持这一点.这比使用诸如mysql_real_escape_string之类的转义函数更安全."
所以,我想问的是:为什么准备参数化查询更安全?