在HTML标签内禁用JavaScript

3

我有一个网站,用户可以使用html设置描述。我希望他们能够使用所有的html功能,但不包括js。有没有办法在标签内禁用所有javascript?请注意,我是指包括onclick等所有javascript。如果没有,是否有某种正则表达式可以用来过滤所有xss攻击?


有没有任何方法可以禁用标签内的所有JavaScript代码?不,实际上我可以简化一下。不,你无法禁用JavaScript,这就是结束了。那是用户的个人电脑,而不是你的。 - Keith
你无法完全停止JS。但是如果你想隔离他们,使他们的JS不能影响主站点,请查看jsfiddle和stack snippets中使用的技术。 - Barmar
@Keith,在信息传递到用户之前有没有一种过滤它的方法? - Qwerty
如果你想防止XSS攻击,你需要更多地考虑服务器端。你使用的后端是什么? - Keith
我认为最好的方法是将标签和属性列入白名单。对于简单的描述,您可能不需要一堆神秘的东西。我也不会允许 CSS;如果必须使用,请公开几个类供使用,但使用完整的 CSS 可能会更改页面的其他部分。 - Luan Nico
2个回答

2

您可以使用内容安全策略(CSP)来保护IT技术相关内容,但配置可能有些繁琐。此外,它并不是100%安全的,因为它取决于客户端(浏览器)。

  • you could load all you scripts externally and block all inlined scripts. This can be done with CSP 1 - the browser support is pretty good for CSP 1.

    Policy would looks something like this:

    Content-Security-Policy: script-src 'self';
    
  • and/or you could whitelist your inline scripts blocks and all others will be blocked. You need CSP 2 for that, the browser support is lower for that one. The browser support is more limited, e.g. no IE

    examples of the policy:

    Nonce based

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

    allow executing <script nonce="123">safemethod()</script>, block others

    Hash bashed

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

    allow executing the script that has the sha 256 hash (hash of the content) of 07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc, block others.


0
有没有办法在标签内禁用所有javascript?如果没有,是否有某种正则表达式可以用来过滤所有xss攻击?
不行,也不行。 不要让用户使用无限制的HTML。 即使您的过滤器是完美的(它不会是完美的),当添加新的HTML功能时,您将不可避免地被抓住,而您的过滤器没有考虑到这些功能。此外,用户可能会做很多恶意的事情,而这些事情并不涉及Javascript,例如用指向恶意网站的链接遮盖您网页的部分内容。
如果您决定允许用户输入HTML描述,请通过基于HTML解析器的过滤器(例如PHP中的tidy或Perl中的HTML::Parser)进行过滤,并仅允许通过已经明确确认为安全的标签和属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接