没有脚本标记,用户在浏览器中可以做些什么?

时间:2011-09-02 11:55:12

标签: security user-input code-injection script-tag html-sanitizing

我有一个条目表单,用户可以在其中键入任意HTML。除脚本标记外,我还需要过滤掉什么?这是我的所作所为:

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

但是sanitizer of WMD(在SO上使用)管理一个白色标签列表,并过滤掉(空白)所有其他标签。为什么呢?

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

1 个答案:

答案 0 :(得分:3)

简短回答:他们可以使用 script标记做任何事情。

运行javascript不需要script标记。脚本也可以放在几乎所有 HTML标记中。脚本可以显示在脚本标记之外的许多位置,包括但不限于用于URL的srchref属性,event handlersstyle属性。

用户将不需要的脚本放入您的网页的能力是一个称为cross-site scripting的安全漏洞。阅读本主题并阅读XSS prevention cheat sheet

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