如果我需要输出一个字符串,如
<div><a>Some link</a></div>不是从数据库中检索的,是否有必要使用
echo htmlspecialchars_decode(htmlspecialchars('<div><a>Some link</a></div>'));还是直接回波已经安全了?
echo '<div><a>Some link</a></div>';为了防止XSS攻击?
在将文本插入到DB之前,是否应该对文本进行净化,“{}[]$%#@!^&*()-_+=|<>?~是允许的?我的意思是,在将特殊字符插入DB之前,应该转换它们吗?”
我在用PDO。
发布于 2014-01-09 20:31:17
如果你对特殊字符进行编码,然后立即对它们进行解码,你就会回到原来的位置,所以这是毫无意义的。
如果您接受用户输入,将其存储在数据库中,将其从数据库中取出并回显到页面,那么您就容易受到XSS攻击。
如果你想抵御它,那么你可以:
htmlspecialchars。如果数据库中的HTML来自受信任的源(这意味着您必须对用户进行身份验证,防范CSRF攻击,并相信此人不会是恶意的或白痴),那么您就可以安全地输出它而不进行修改。
我的意思是,在将特殊字符插入DB之前,我应该转换它们吗?
一般来说,对于任何给定的格式,在插入该格式之前,您应该立即对该格式的数据进行转义。如果您需要延迟以不同的格式显示相同的数据,它会避免出现问题。
尽管如此,对数据运行白名单HTML解析器是一种相对昂贵的操作,因此您可能希望创建一个经过消毒的版本,并将其存储在数据库中的未消毒版本旁边。
https://stackoverflow.com/questions/21030398
复制相似问题