首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >htmlspecialchars()和htmlspecialchars_decode()

htmlspecialchars()和htmlspecialchars_decode()
EN

Stack Overflow用户
提问于 2014-01-09 20:25:10
回答 1查看 844关注 0票数 1

如果我需要输出一个字符串,如

代码语言:javascript
复制
<div><a>Some link</a></div>

不是从数据库中检索的,是否有必要使用

代码语言:javascript
复制
echo htmlspecialchars_decode(htmlspecialchars('<div><a>Some link</a></div>'));

还是直接回波已经安全了?

代码语言:javascript
复制
echo '<div><a>Some link</a></div>';

为了防止XSS攻击?

在将文本插入到DB之前,是否应该对文本进行净化,“{}[]$%#@!^&*()-_+=|<>?~是允许的?我的意思是,在将特殊字符插入DB之前,应该转换它们吗?”

我在用PDO。

EN

回答 1

Stack Overflow用户

发布于 2014-01-09 20:31:17

如果你对特殊字符进行编码,然后立即对它们进行解码,你就会回到原来的位置,所以这是毫无意义的。

如果您接受用户输入,将其存储在数据库中,将其从数据库中取出并回显到页面,那么您就容易受到XSS攻击。

如果你想抵御它,那么你可以:

  • 不允许用户编写HTML。在将数据插入页面之前对其使用htmlspecialchars
  • 允许HTML,但通过HTML解析器和白色列表元素和属性来运行,这些元素和属性都是安全的,也是您可以接受的。

如果数据库中的HTML来自受信任的源(这意味着您必须对用户进行身份验证,防范CSRF攻击,并相信此人不会是恶意的或白痴),那么您就可以安全地输出它而不进行修改。

我的意思是,在将特殊字符插入DB之前,我应该转换它们吗?

一般来说,对于任何给定的格式,在插入该格式之前,您应该立即对该格式的数据进行转义。如果您需要延迟以不同的格式显示相同的数据,它会避免出现问题。

尽管如此,对数据运行白名单HTML解析器是一种相对昂贵的操作,因此您可能希望创建一个经过消毒的版本,并将其存储在数据库中的未消毒版本旁边。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21030398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档