【发布时间】:2021-05-28 20:36:37
【问题描述】:
我正在开发一个网站,该网站将包含大量用户生成的内容。作为所见即所得的编辑器,我使用的是 tinyMCE。作为模板引擎,我使用的是ejs。 为了防止 XSS 我决定使用xss npm 包。 我正在使用这些自定义规则:
const strict = {
whiteList: {},
}
const withTags = {
whiteList: {
div: [],
strong: [],
em: [],
br: [],
ul: [],
li: [],
ol: [],
blockquote: [],
},
}
假设用户使用文本区域并提交此代码:
<script>alert("hi")</script>
在我的数据库中以这种方式保存:
<script>alert("hi")</script>
现在,当 ejs 呈现内容时,一些内容会以转义输出 () 呈现。渲染后的转义输出(html 页面)如下所示:
&lt;script&gt;console.log("test")&lt;/script&gt;
但是,某些内容是使用 ejs 未转义的原始输出 () 呈现的。 Html 看起来是这样的:
<script>console.log("test")</script>
我有两个问题:
- 因为 被转义为
&lt;和&gt;呈现 ejs 非转义输出是否安全? - 我所做的通常足以保护 XSS 吗?
非常感谢!
【问题讨论】:
-
这是纯粹的编程问题,不在此处讨论。在 SO 上可以更好地回答。
-
@mentallurg 谢谢,我会尝试在 SO 上询问。
标签: xss