Play框架中正确转义的指南
问题内容:
我正在尝试绘制Play框架如何支持转义。
这是一个很好的页面,阐明了所需的功能:https
:
//www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
因此,我尝试将其与Play模板功能相关联,并充分了解Play的功能和不功能。
- HTML转义:
${}
或escape()
函数 - 属性转义:我找不到内置解决方案
- JavaScript转义:有一个
escapeJavaScript()
http://www.playframework.org/documentation/1.2/javaextensions - CSS转义:我找不到内置的解决方案
- 网址转义:没有任何特殊的内置功能,而是常用的Java解决方案,例如Java是否等效于JavaScript,其JavaScriptURIComponent产生相同的输出? -更新:http ://www.playframework.org/documentation/1.2/javaextensions中有urlEncode()
另一个困惑点是对它的支持index.json
(即使用模板而不是HTML来构建JSON)。是${}
魔术切换到JSON文档中转义的JavaScript,还是仍逃脱HTML,因此JSON模板中的所有内容都必须具有显式的escapeJavaScript()
?
在http://www.playframework.org/documentation/1.2/javaextensions上也有一个addSlashes(),但是对于我能想到的任何情况似乎都不是很正确。(?)
拥有关于如何实现Play中所有转义功能的详尽指南,将是很棒的。在我看来,在某些情况下,答案是“自己动手”,但也许我错过了其中的内容。
问题答案:
我一直在研究这个问题,因此决定根据您已经拥有的内容,这份OWASP速查表和我自己的一些实验来写出自己的答案
HTML转义:
- $ {}或escape()函数
属性转义:(常见属性)
- 只要您将属性用双引号(“)括起来并使用$ {},就可以在游戏中进行处理。
- 对于复杂的属性(href / src / etc),请参见下面的JavaScript
- 不安全代码示例
<a id=${data.value} href="...">...</a>
<a id='${data.value}' href="...">...</a>
- 这将破坏data.value的内容:
% href=javascript:alert('XSS')
%' href=javascript:alert(window.location)
JavaScript转义:(以及复杂的属性)
- 使用escapeJavaScript()。http://www.playframework.org/documentation/1.2/javaextensions
- 不安全代码示例
<a onmouseover="x='${data.value}'; ..." href="...">...</a>
- 这将破坏data.value的内容:
'; javascript:alert(window.location);//
CSS转义:
- 不确定,因为我不需要这个。
- 我以为您需要以某种方式创建自己的。希望那里有东西可以为您操纵琴弦。
网址转义: