我在这里读到:
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注入?
答案 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,因此您需要制作一种已批准元素的白名单。您可以将<script>alert('bam');</script>
//or with quotes constant
<script>alert('bam');</script>
替换为用户输入中不会出现的自定义文字。在我的下面示例中,我选择了<>
。然后通过custom_random_hack
运行一切,它将编码所有特殊字符。然后将交换的元素转换回HTML元素。
htmlspecialchars
答案 2 :(得分:0)