据Marc说
防止XSS攻击
简而言之,为了保护应用程序免受代码注入XSS的攻击,您必须: 将配置中的默认grails.views.default.codec设置为"HTML“
好的。所以如果我在我的Config.groovy中有下面这个
grails.views.default.codec = "none"
在“我的主计长”中,我补充如下:
def afterInterceptor = { model ->
model.headerJs = "alert('bingo for '+[$params.unitId]);"
}
在我的普惠制中:
<r:script disposition="head">${headerJs}</r:script>
它起作用了。我看到了预期的javascript警报,当我做查看源,我得到我的警报,当页面服务。
但是,如果在Config.groovy中我应用了建议的更改:
grails.views.default.codec = "html"
我的普惠制呈现
<script type="text/javascript">alert('halooba for '+[1]);</script>
我看得出来很安全。
我使用这个应用程序的目标是在域中为客户保存自定义的JS片段、各种属性和其他值。这些值将由我们的管理员(而不是客户)输入。基于谁使用HTTP请求调用页面,例如www.mydomain.com/ThisApp/?customerId=13423 (但是编码的customerId),我会从Controller调用Services,从域获取客户的相关设置,并将它们注入GSP。
我知道我可以将JS和CSS放入文件中,然后使用参考资料插件来正确地引入它们,但我也在查看此方法以进行特定的自定义。
因此,要遵循这个安全方法,我要么需要对其进行反编码,要么需要确定另一个方法将javascript包含到不对其编码的GSP中。
有什么建议吗?
谢谢!
发布于 2013-12-19 23:53:10
您可以建议Grails不要使用GSP中可用的原(),如下所示:
<r:script disposition="head">${raw(headerJs)}</r:script>
发布于 2013-12-20 01:54:37
对于Grails2.2.x及更低版本,您可以将建议的编码放在Config.groovy中:
grails.views.default.codec = "html"
并使用Taglib引入安全的、不应被HTML编码的值:
<r:script><com_myapp:getJSDeferred unitId="${params.unitId}" /></r:script>
它会变成原始的。
发布于 2014-05-06 20:23:14
FYI:上面的解决方案不允许JSON输出分配给javascript变量。我的解决办法是,假设您将model.data定义为hashmap:
var someVar= ${raw(data as JSON).toString())};
https://stackoverflow.com/questions/20693831
复制相似问题