网址为
strip_tags()和mysql_real_escape_string()就够了吗?
答案 0 :(得分:16)
“足够的消毒”完全取决于你所谈论的环境。 MySQL的清理应被视为与Web输出的清理完全分开,您应该单独处理它们以避免很多麻烦。
为MySQL清理
mysql_real_escape_string()
将清理一段数据并使其安全放入SQL查询。清理输出
htmlspecialchars($val)
在输出时将阻止呈现任何恶意代码,因为<
和>
字符将转换为其实体表示形式,而不会呈现为标记分隔符。ENT_QUOTES
修饰符,例如<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
除非您有特殊要求,否则这应该是您所需要的。 strip_tags()
不应该真正用于清理,因为它可能被错误形成的HTML所欺骗。清理是一个有价值的目标,如果你可以将你的上下文分开,你将会遇到更少的数据操作问题。
答案 1 :(得分:1)
在字符串上调用htmlentities()而不是指望strip_tags()可能更安全,更好。
strip_tags()不会删除像'"&
<img src="<?= strip_tags($myVar) ?>">
和
$myVar = '">something goes here<';
然后你最终得到:
<img src="">something goes here<">
这显然是XSS漏洞的根源;实际利用是留给读者的练习。
答案 2 :(得分:0)
我最初赞成弗兰克的答案,但想到了一个问题:htmlentities()会打破这样的法律网址:
http://www.mywebsite.com/profile?id=jojo&w=60&h=60
也许剥离尖括号+ mysql_real_escape就足够了?