Hav*_*c P 26 java security xss escaping playframework
我正在尝试绘制Play框架如何支持转义.
这是一个很好的页面,列出了所需的功能:https: //www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
因此,我试图将其与Play模板功能联系起来,并充分了解Play的功能和不执行功能.
${}
或escape()
函数escapeJavaScript()
http://www.playframework.org/documentation/1.2/javaextensions另一个困惑点是支持index.json
(即使用模板来构建JSON而不是HTML).是否${}
神奇地切换到JSON文档中的JavaScript转义,或者它是否仍然转义HTML,因此JSON模板中的所有内容都必须具有显式escapeJavaScript()
?
http://www.playframework.org/documentation/1.2/javaextensions上还有一个addSlashes(),但对于我能想到的任何情况,它似乎都不太合适.(?)
如果有一个关于如何在Play中进行所有转义的全面指导,那将是很棒的.在我看来,在几种情况下答案是"滚动你自己",但也许我错过了所包含的内容.
我一直在研究这个,所以决定根据你已经拥有的东西,OWASP的备忘单和我自己的一些实验来写出我自己的答案.
HTML转义:
属性转义:(常用属性)
<a id=${data.value} href="...">...</a>
<a id='${data.value}' href="...">...</a>
% href=javascript:alert('XSS')
%' href=javascript:alert(window.location)
JavaScript转义:(和复杂的属性)
<a onmouseover="x='${data.value}'; ..." href="...">...</a>
'; javascript:alert(window.location);//
CSS转义:
网址转义:
我认为你的摘要绝对正确.Play为您提供了一些解决方案,但并非全部.但是,在Play没有提供某些东西的地方(在CSS和属性中),我实际上找不到它的需要.
OWASP标准指定您应该转义不受信任的代码.因此,在CSS中使用不受信任的代码的唯一方法是动态生成它.如果它是动态生成的,那么没有什么能阻止你使用标准的Groovy模板,因此使用${}
和escape()
.
至于属性转义,再次,就我所知,你唯一需要这个时候就是在groovy模板中构建你的视图,所以再次,你可以使用${}
或escape()
.