Java 游戏框架中正确逃生指南
我试图找出Play框架如何支持转义 这是一个很好的页面,详细说明了所需的功能: 所以我试图将其与Play模板功能联系起来,并充分理解Play的功能和不功能Java 游戏框架中正确逃生指南,java,security,escaping,xss,playframework,Java,Security,Escaping,Xss,Playframework,我试图找出Play框架如何支持转义 这是一个很好的页面,详细说明了所需的功能: 所以我试图将其与Play模板功能联系起来,并充分理解Play的功能和不功能 HTML转义:${}或escape()函数 属性转义:我找不到内置解决方案 JavaScript转义:有一个escapeJavaScript() CSS转义:我找不到内置的解决方案 URL转义:没有什么特别的内置,但通常是Java解决方案,例如-更新:在 另一个混淆点是对index.json的支持(即使用模板构建json而不是HTML)
- HTML转义:
或${}
函数escape()
- 属性转义:我找不到内置解决方案
- JavaScript转义:有一个
escapeJavaScript()
- CSS转义:我找不到内置的解决方案
- URL转义:没有什么特别的内置,但通常是Java解决方案,例如-更新:在
index.json
的支持(即使用模板构建json而不是HTML)。${}
是神奇地切换到JSON文档中的JavaScript转义,还是仍然转义HTML,因此JSON模板中的所有内容都必须具有显式的escapeJavaScript()
上还有一个addSlashes(),但它似乎不适合我能想到的任何情况。(?)
这将是伟大的,有一个关于如何做游戏中逃跑的所有口味的全面指导。在我看来,在很多情况下,答案都是“自己滚”,但也许我遗漏了其中的内容 我认为你的总结完全正确。Play提供了一些解决方案,但不是全部。然而,在Play不提供东西的两个地方(在CSS和属性中),我实际上找不到它的需要 OWASP标准指定应转义不受信任的代码。因此,CSS中存在不可信代码的唯一方法是动态生成。如果它是动态生成的,那么使用标准Groovy模板并因此使用
${}
和escape()
就不会阻止您这样做
至于属性转义,就我所知,您唯一需要它的时间是在groovy模板中构建视图时,因此,您可以再次使用
${}
或escape()
我一直在研究这个问题,因此决定根据您已经掌握的内容编写我自己的答案,这和我自己的一些实验
HTML转义:
- ${}或escape()函数
- 只要将属性用双引号(“)括起来并使用${},就可以在游戏中处理此问题
- 有关复杂属性(href/src/etc),请参见下面的JavaScript
- 示例不安全代码
- 对于data.value,这将与此中断:
%href=javascript:alert('XSS')
%'href=javascript:alert(window.location)
- 使用escapeJavaScript()
- 示例不安全代码
- 对于data.value,这将与此中断:
”;javascript:alert(window.location);//
- 不确定,因为我不需要这个。
- 我想你需要以某种方式创建自己的字符串。希望有什么东西可以为你操作字符串
- 使用urlEncode()