如何在HTML字符串中转义JavaScript,同时保持HTML未转义?
我们有一个webapplication。在某些情况下,有一个基于JavaScript的WSIWYG/RichText编辑器。它过滤一些JavaScript,但使用HTML文本格式化其内容 不幸的是,它没有过滤所有JavaScript。我能够用事件处理程序证明XSS攻击。我认为JavaScript的JavaScript客户端过滤根本不安全,因为在客户端它可以被操纵 所以我想在服务器端过滤或转义JavaScript。我简要地看了一下ESAPI for Java。但我们有一个要求,我不知道这是特殊的还是问题: 编辑器使用的HTML元素不应该被过滤或转义,而应该是JavaScript。HTML应该在浏览器中以普通方式呈现如何在HTML字符串中转义JavaScript,同时保持HTML未转义?,java,javascript,security,escaping,xss,Java,Javascript,Security,Escaping,Xss,我们有一个webapplication。在某些情况下,有一个基于JavaScript的WSIWYG/RichText编辑器。它过滤一些JavaScript,但使用HTML文本格式化其内容 不幸的是,它没有过滤所有JavaScript。我能够用事件处理程序证明XSS攻击。我认为JavaScript的JavaScript客户端过滤根本不安全,因为在客户端它可以被操纵 所以我想在服务器端过滤或转义JavaScript。我简要地看了一下ESAPI for Java。但我们有一个要求,我不知道这是特殊的还
- 有没有一种安全的方法,可以在保持HTML不变的同时转义或过滤JavaScript
- ESAPI或其他API是否有助于我这样做
- 我该怎么做呢
提前感谢。您需要解析HTML并拒绝任何不在安全标记/属性严格白名单中的标记和属性 白名单不包括像
、
或
这样的标签,也不包括像onclick
、onload
或style
这样的属性
您还应确保
href
和src
属性使用http
或https
协议(或相对路径),而不是javascript:
在不知道应用程序是否容易受到基于DOM的XSS攻击或普通(反射和持久)XSS攻击的攻击的情况下,很难说明必须使用哪些转义方案来转义javascript
不过,ESAPI for Java在这两种情况下都会有所帮助。对于基于DOM的XSS攻击,您需要确保解析链中的每个解析器都不会受到XSS攻击。在反射或持久XSS攻击的情况下,通常需要
应该记住,允许原始HTML本身也是不安全的,这会导致XSS。您可能想看看另一种对输入进行消毒的方法;在这种情况下,可以使用筛选HTML。谢谢您的回答。难道没有任何API可以为我做到这一点吗?我害怕做错事,独自实施。细节中隐藏了太多的陷阱。谢谢你的回答。我还不知道基于DOM的XSS。我得读一读。该漏洞是一个持久的XSS漏洞。OutWeb框架默认情况下会转义HTML和JS,但在本例中,我们将其切换为允许HTML呈现。这就是漏洞的来源。反射的XSS也可能以这种方式出现,但还没有被发现。这是一个有点连线,以获得正确的依赖关系,但java编码是真的很容易。在第一次测试中,它运行良好。自定义配置(如果需要)可能更复杂一些。再次谢谢。@anonymous,不客气。我认为使用富文本编辑器时,使用AntiSamy比使用ESAPI更好。