如果插入用户输入而不修改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)
可以采取哪些措施来防止这种情况发生?
mysql_real_escape_string在大多数情况下是否足以清理用户输入?
::编辑::
我主要考虑的是防止SQL注入,但我最终想知道在应用mysql_real_escape_string之后是否可以信任用户数据,或者我是否应该采取额外措施来清理数据,然后再将其传递给应用程序和数据库.
我知道清除HTML字符的位置很重要,但我不认为有必要信任用户输入.
Ť