我什么时候需要在Grails中使用多个编解码器进行编码?

时间:2018-01-09 23:51:54

标签: grails

我不清楚何时(或者是否)我应该使用多个Grails encodeAsXXX调用。

此引用表示您需要编码AsURL然后编码AsJavaScript:http://grailsrocks.com/blog/2013/4/19/can-i-pwn-your-grails-application

它还说你需要编码AsURL然后编码AsHTML,我不明白为什么在显示的情况下这是必要的但不是所有的时间?

我应该使用多个链式编码器吗?

如果我要将网址呈现为HTML属性,那么我应该编码ASURL吗?那么encodeAsHTML会怎样?

如果我将URL变换为作为HTML文档的一部分发送的JavaScript变量(通过SCRIPT元素),我应该编码asURL,encodeAsJavaScript然后编码AsHTML吗?

如果我将字符串呈现为作为HTML文档的一部分发送的JavaScript变量,我应该编码ASJavaScript然后编码AsHTML吗?

官方文档 - https://docs.grails.org/latest/guide/security.html - 不要显示多个链式编码器的任何示例。

除了找到所有编码器的来源并查看它们编码的内容以及接收端的有效内容之外,我无法理解如何理解该做什么 - 但我认为它不应该&对于开发人员来说这很难,而且我可能缺少一些简单的东西或者我找不到的一些说明。

FWIW,我认为我所谈论的编码器就是这些:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/JavaScriptUtils.html#javaScriptEscape-java.lang.String-

https://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html#encode(java.lang.String,%20java.lang.String)

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/util/HtmlUtils.html#htmlEscape-java.lang.String-

1 个答案:

答案 0 :(得分:0)

始终考虑XSS当然很重要,但在阅读您的问题时,我认为您高估了您需要做的事情。只要您使用Grails 2.3或更高版本并且grails.views.default.codec设置为html默认情况下,您在GSP中使用${}呈现的所有内容都将被正确转义对你而言。

只有当您故意绕过转义时,例如,如果由于某种原因需要将已清理的用户输入恢复为GSP中的有效JavaScript,则需要使用encodeAsXXX方法或类似方法

我认为(并且文章也提到了这一点),无论如何这应该引起一种气味,因为你可能应该将JavaScript封装在不同的文件或TagLib中,以处理转义。

底线,只有在覆盖默认HTML编码时才使用编码方法,否则${}会为您处理。