我有一个网站,用户可以使用html设置描述。我希望他们能够用html做所有事情,除了使用js。无论如何禁用标签内的所有JavaScript?请记住,我的意思是所有javascript,包括onclick
之类的内容。如果没有,是否有某种正则表达式我可以用来过滤掉所有的xss攻击?
答案 0 :(得分:1)
您可以使用CSP(内容安全策略),但配置起来可能有点麻烦。此外,它不是100%安全,因为它取决于客户端(浏览器)
您可以在外部加载所有脚本并阻止所有内联脚本。这可以通过CSP 1完成 - browser support is pretty good for CSP 1.
政策看起来像这样:
Content-Security-Policy: script-src 'self';
和/或您可以将内联脚本块列入白名单,其他所有块都将被阻止。您需要CSP 2,浏览器支持较低。 The browser support is more limited, e.g. no IE
政策的例子:
Content-Security-Policy: script-src 'nonce-123'
允许执行<script nonce="123">safemethod()</script>
,阻止他人
Content-Security-Policy: script-src 'sha256-07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc'
允许执行具有sha {256}哈希(内容的哈希值)07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc
的脚本,阻止其他脚本。
答案 1 :(得分:0)
是否有禁用标签内的所有javascript?如果没有,是否有某种正则表达式我可以用来过滤掉所有的xss攻击?
不,不。
不允许用户使用不受限制的HTML。即使您的过滤器是完美的(它不会是这样),当您添加新的HTML功能时,您将不可避免地被捕获没有考虑到。此外,用户可以做的许多恶意事情都不涉及Javascript,例如模糊部分网页以及恶意网站的链接。
如果您致力于允许用户将描述输入为HTML,请将其传递给基于HTML解析器的过滤器(例如PHP中的tidy
或Perl中的HTML::Parser
),并且仅允许您明确确认安全的标签和属性。