Php htmlspecialchars()和htmlspecialchars_decode()
如果我需要输出一个字符串,比如Php htmlspecialchars()和htmlspecialchars_decode(),php,Php,如果我需要输出一个字符串,比如 <div><a>Some link</a></div> 一些链接 不是从数据库中检索到的,是否需要使用 echo htmlspecialchars_decode(htmlspecialchars('<div><a>Some link</a></div>')); echo htmlspecialchars_decode(htmlspecialchars('Some
<div><a>Some link</a></div>
一些链接
不是从数据库中检索到的,是否需要使用
echo htmlspecialchars_decode(htmlspecialchars('<div><a>Some link</a></div>'));
echo htmlspecialchars_decode(htmlspecialchars('Some link'));
或者直接回音已经安全了
echo '<div><a>Some link</a></div>';
echo“某些链接”;
防止XSS攻击
我应该在哪里清理文本在将其插入数据库之前,是否允许“{}[]$%#@!^&*()-|+=|?~”?
我的意思是,我应该在将特殊字符插入数据库之前转换它们吗
我使用的是PDO。如果对特殊字符进行编码,然后立即对其进行解码,最终会返回到起始位置,因此这是毫无意义的 如果您接受用户输入,将其存储在数据库中,将其从数据库中取出并回显到页面,那么您很容易受到XSS攻击 如果你想防御它,那么:
- 不允许用户编写HTML。在将数据插入页面之前,请对数据使用
htmlspecialchars
- 允许HTML,但通过HTML解析器和白名单元素和属性运行它,这些元素和属性都是安全的,并且是您可以接受的
这就是说,在数据上运行白名单HTML解析器是一项相对昂贵的操作,因此您可能希望创建一个经过清理的版本,并将其存储在数据库中未经清理的版本旁边。如果您直接从PHP代码中回显它,则是安全的。因此HTML在您的代码中是硬编码的?那么无需转义。仅供参考:XSS攻击s是从客户端到服务器,而不是从服务器到服务器client@MartinKabanen,所以我可以直接以HTML格式回送,这样会安全吗?@lordkain-否。XSS攻击是从客户端到服务器再到客户端的。它们可以反映(在不涉及数据库的情况下)或存储(数据放在数据库中…并且可以向输入数据的用户以外的其他用户显示坏数据)