如何在html上显示htmlspecialchars?

时间:2016-06-03 13:36:40

标签: php xss code-injection htmlspecialchars

我在这里读到:
https://stackoverflow.com/a/8932454/4301970
htmlspecialchars()非常有效防止xss攻击。

我收到来自所见即所得编辑的格式化文本,例如:

<p>
    <em>
        <strong><span style="font-size:36pt;">test</span></strong>
    </em>
</p>

在我的html上编码:

<!DOCTYPE html>
<html lang=en>
<head>
    <title></title>
</head>
<body>
<?php echo htmlspecialchars('<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>', ENT_QUOTES); ?>
</body>
</html>

将在浏览器上输出:

<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>

如何正确显示格式化文本,同时阻止XSS注入?

3 个答案:

答案 0 :(得分:1)

为防止xss注入并正确显示,一旦strip_tag() isn't fully safe,您应该查看HTML PURIFIER

我希望这有帮助!

答案 1 :(得分:1)

htmlspecialchars对XML中具有(或可能)特殊含义的所有字符进行编码,具体为<>&"和{ {1}}(如果设置了ENT_QUOTES)。

因此,使用此设置,浏览器不会呈现任何恶意代码尝试。

例如

'

将是

<script>alert('bam');</script>
JS不会进行处理。这可以成为阻止XSS注射的有效手段。但是,您希望用户提交一些HTML,因此您需要制作一种已批准元素的白名单。您可以将&lt;script&gt;alert('bam');&lt;/script&gt; //or with quotes constant &lt;script&gt;alert(&#039;bam&#039;);&lt;/script&gt; 替换为用户输入中不会出现的自定义文字。在我的下面示例中,我选择了<>。然后通过custom_random_hack运行一切,它将编码所有特殊字符。然后将交换的元素转换回HTML元素。

htmlspecialchars

演示:https://eval.in/582759

答案 2 :(得分:0)

如果要保留缩进:

将您的输出换成<pre>标记。此标记保留空白字符

如果您希望将输入呈现为HTML:

请勿使用htmlspecialchars。是的,这会再次将您的应用打开到XSS。