1

我有一个输入表单,用户可以在其中输入任意 HTML。除了脚本标签,我还需要过滤什么?这就是我所做的:

userInput.replace(/<(script)/gi, "&lt;$1");

但是WMD 的消毒剂(在 SO 上使用)管理标签的白名单,并过滤掉(空白)所有其他标签。为什么?

我不喜欢白名单,因为我不想阻止用户输入任意标签,如果她愿意的话;但如果需要,除了“脚本”之外,我还可以使用更广泛的黑名单。我需要什么作为黑名单?

4

1 回答 1

3

简短的回答:他们可以script标签做的任何事情。

script运行 javascript 不需要该标记。脚本也可以放置在几乎每个HTML 标记中。脚本可以出现在脚本标签之外的许多地方,包括但不限于用于 URL、事件处理程序src和属性的属性。hrefstyle

用户将不需要的脚本放入您的页面的能力是一种称为跨站点脚本的安全漏洞。阅读此主题并阅读XSS 预防备忘单

您可能不想让用户将 HTML 添加到您的页面。如果您需要此功能,请考虑其他格式,例如允许您禁用任何嵌入式 HTML 的 Markdown;或者另一个不太安全的选项是使用过滤库来尝试删除所有脚本,例如 HTMLPurifier。如果您选择过滤选项,请务必订阅新版本的公告,并在发现和解决新漏洞时始终返回您的项目以安装过滤器的错误修复版本。

于 2011-09-02T12:39:08.187 回答