如果插入用户输入而不修改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)
可以采取哪些措施来防止这种情况发生?
我正在处理一个表单,其中有可能让用户在要提交给数据库的字符串中使用非法/特殊字符.我想在字符串中转义/否定这些字符,并且一直在使用htmlspecialchars().但是,有更好/更快的方法吗?
我一直在阅读有关保护PHP应用程序的一些内容,在我看来,这mysqli_real_escape_string是在将数据插入MySQL表时使用的正确函数,因为这addslashes可能会导致智能攻击者发生一些奇怪的事情.对?
但是,有一件事令我感到困惑.我似乎记得被告知addslashes比将htmlentities用户输入的数据回复给用户以保护他们的数据更好,但似乎addslashes是有漏洞的人.这是真的,还是我记错了?
可能重复:
Htmlentities vs addslashes vs mysqli_real_escape_string
何时使用哪个字符串转义方法?
嗨,我很困惑何时使用addslashes以及何时使用htmlentities.
你能告诉我一个例子,我应该在哪里使用addslashes以及何时使用htmlentities.