我做了这个功能
function echoSanitizer($var)
{
$var = htmlspecialchars($var, ENT_QUOTES);
$var = nl2br($var, false);
$var = str_replace(array("\\r\\n", "\\r", "\\n"), "<br>", $var);
$var = htmlspecialchars_decode($var);
return stripslashes($var);
}
xss攻击会安全吗?
<br>
为什么我需要所有这些?因为我想预览用户输入的内容,我想让他们看到所见即所得的东西。一些输入来自textarea框,我希望保留空格,因此需要nl2br。
一般来说,我问的是(htmlspecialchars_decode),因为它对我而言是新的。安全吗?总的来说,如果我使用它来显示用户输入,我会安全的功能吗?
(此方案中没有涉及数据库。)
答案 0 :(得分:1)
在你的情况下htmlspecialchars_decode()
使函数不安全。不允许用户插入未转义的<
字符,因为这允许他们创建任意标记(和filtering/blacklisting is a cat and mouse game you can't win)。
至少<
必须转义为<
。
如果您只允许带有换行符的纯文本,则:
nl2br(htmlspecialchars($text_with_newlines, ENT_QUOTES));
可以安全地以HTML格式输出(<script>
内部除外)或期望JavaScript或网址的属性,例如onclick
和href
(在后一种情况下有人可以使用javascript:…
URL))。
如果你想允许用户使用HTML标签但不利用你的页面,那么正确的功能就不适合StackOverflow帖子(长达数千行,需要完整的HTML解析器,处理URL和CSS,等等) - 你必须使用像HTMLPurifier这样重量级的东西。