【发布时间】:2016-06-03 13:36:40
【问题描述】:
我在这里读过:
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 注入?
【问题讨论】:
-
你可以在你的元素之后使用 \n 来换行,而 \t 来换行。
-
nl2br(str_replace(" ", "$nbsp;" htmlspecialchars($data)));。像这样? -
htmlspecialchar将创建元素的特殊字符转换为其实体,因此它们不会被渲染。您希望渲染一些元素,因此您需要一种不同的方法。 -
将您想要允许的元素转换为不同的符号,然后运行 htmlspecial 字符,然后取消转换您允许的元素。
-
这是一个起点,eval.in/582759。
标签: php xss code-injection htmlspecialchars