Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在HTML字符串中转义JavaScript,同时保持HTML未转义?_Java_Javascript_Security_Escaping_Xss - Fatal编程技术网

如何在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。但我们有一个要求,我不知道这是特殊的还

我们有一个webapplication。在某些情况下,有一个基于JavaScript的WSIWYG/RichText编辑器。它过滤一些JavaScript,但使用HTML文本格式化其内容

不幸的是,它没有过滤所有JavaScript。我能够用事件处理程序证明XSS攻击。我认为JavaScript的JavaScript客户端过滤根本不安全,因为在客户端它可以被操纵

所以我想在服务器端过滤或转义JavaScript。我简要地看了一下ESAPI for Java。但我们有一个要求,我不知道这是特殊的还是问题: 编辑器使用的HTML元素不应该被过滤或转义,而应该是JavaScript。HTML应该在浏览器中以普通方式呈现

  • 有没有一种安全的方法,可以在保持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更好。