在大多数情况下,mysql_real_escape_string
是否足以清理用户输入?
::编辑::
我主要考虑防止SQL注入,但我最终想知道,在应用mysql_real_escape_string之后,我是否可以信任用户数据,或者在将数据传递给应用程序和数据库之前,是否应该采取额外措施来清理数据。
我知道清理HTML字符很重要,但我不认为这对于信任用户输入是必要的。
T
发布于 2010-03-01 11:13:05
mysql_real_escape_string()
仅用于防止SQL注入攻击。它不会帮助你防止跨站点脚本攻击。为此,您应该在输出最初从用户输入中收集的数据之前使用htmlspecialchars()
。
发布于 2010-03-01 11:16:57
有不同类型的“清洁”。
对于数据库数据,mysql_real_escape_string就足够了,但如果它是HTML语言,则浏览器在显示时仍将对其进行计算。
要从用户输入中删除超文本标记语言,可以使用strip_tags。
我建议您考虑使用PDO而不是常规的MySQL内容,因为它支持开箱即用的预准备语句,并且可以为您处理无效数据的转义。
发布于 2012-05-12 05:29:31
您可以同时尝试这两种方法,如
function clean_input($instr) {
// Note that PHP performs addslashes() on GET/POST data.
// Avoid double escaping by checking the setting before doing this.
if(get_magic_quotes_gpc()) {
$str = stripslashes($instr);
}
return mysql_real_escape_string(strip_tags(trim($instr)));
}
https://stackoverflow.com/questions/2353666
复制相似问题