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

时间:2013-02-28 20:19:43

标签: grails xss gorm

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

示例:

def color = Colors.findByName(params.colorname)

我想有人可能会使用params.colorname参数来对我的mysql数据库运行错误的查询。

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

1 个答案:

答案 0 :(得分:5)

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

您还可以在grails.views.default.codec = "html"中使用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")