如何在Grails应用程序中防止XSS攻击

bir*_*rdy 2 xss grails grails-orm

在我的grails应用程序中,我正在从中提取文本params并将其用作我的域查询中的参数:

例:

def color = Colors.findByName(params.colorname)
Run Code Online (Sandbox Code Playgroud)

我想有人可以摆弄params.colorname参数来对我的mysql数据库运行错误的查询.

有哪些好的做法可以防止这些事情发生?

doe*_*eri 5

在视图中渲染可能包含XSS攻击的字段时,需要将其编码为HTML.您应该对包含用户输入的所有字段进行编码.所有标准Grails标记都编码为HTML.如果您${}在视图中使用,那么您可能遇到麻烦.您需要手动编码,${colorname.encodeAsHTML()}或者使用标签,fieldValue如果它是bean属性.

您还可以使用grails.views.default.codec = "html"in 设置全局默认编解码器Config.groovy.

注意双重编码并确保在自定义标记中编码为HTML.

您还引用了SQL注入攻击,它与XSS攻击不同.如果您正在编写自己的SQL或HQL并直接将用户输入插入到SQL/HQL中,那么您只会面临SQL注入的风险.这意味着要做Colors.executeQuery("from Colors where name like ?", params.colorname)而不是Colors.executeQuery("from Colors where name like $params.colorname").

  • "所有标准的Grails标签都编码为HTML." 在全新版本2.2.2和2.1.5之前,情况并非如此.`g.message`没有编码.这已经[在新版本中解决](http://jira.grails.org/browse/GRAILS-7170). (2认同)