在html标记内禁用js

时间:2017-10-04 21:25:43

标签: javascript html xss

我有一个网站,用户可以使用html设置描述。我希望他们能够用html做所有事情,除了使用js。无论如何禁用标签内的所有JavaScript?请记住,我的意思是所有javascript,包括onclick之类的内容。如果没有,是否有某种正则表达式我可以用来过滤掉所有的xss攻击?

2 个答案:

答案 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

    政策的例子:

    基于Nonce

    Content-Security-Policy: script-src 'nonce-123' 
    

    允许执行<script nonce="123">safemethod()</script>,阻止他人

    Hash bashed

    Content-Security-Policy: script-src 'sha256-07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc' 
    

    允许执行具有sha {256}哈希(内容的哈希值)07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc的脚本,阻止其他脚本。

答案 1 :(得分:0)

  

是否有禁用标签内的所有javascript?如果没有,是否有某种正则表达式我可以用来过滤掉所有的xss攻击?

不,不。

不允许用户使用不受限制的HTML。即使您的过滤器是完美的(它不会是这样),当您添加新的HTML功能时,您将不可避免地被捕获没有考虑到。此外,用户可以做的许多恶意事情都不涉及Javascript,例如模糊部分网页以及恶意网站的链接。

如果您致力于允许用户将描述输入为HTML,请将其传递给基于HTML解析器的过滤器(例如PHP中的tidy或Perl中的HTML::Parser),并且仅允许您明确确认安全的标签和属性。