html_entity_decode()是否允许安全输出?

时间:2014-07-14 08:52:40

标签: php xss htmlpurifier

使用汽车销售网站Autotrader,他们不输出HTML符号。相反,他们不允许使用符号,只需将符号转换为实体,然后输出即可。

出于某种原因,他们似乎觉得有必要解码实体以进行输出。

这引出了另一个关于我自己网站的问题。

我正在使用HTMLPurifier来安全地保存和输出用户输入。

这将转换所有符号并且<等等到他们的实体。

输出html实体的正确方法是什么,但在PHP中作为正确的符号?

我一直在使用html_entity_decode()。但是我已经想到,实际上这可能会改变角色并在那里再次允许XSS等攻击。

我如何PHP回显包含实体但正确且安全地显示符号的字符串?

1 个答案:

答案 0 :(得分:2)

不解码,将带有实体的字符串直接发送到HTML输出。

用户的浏览器将正确显示HTML实体。从PHP输出时

echo "Hello kitty!<script>steal_her_password();</script>";

然后用户将正确看到

Hello kitty!<script>steal_her_password();</script>

但是如果你先解码这个字符串,那么用户只会看到

Hello kitty!

加上她的密码将被盗。