在我的grails应用程序中,我正在从params
中提取文本并将其用作我的域查询中的参数:
示例:
def color = Colors.findByName(params.colorname)
我想有人可能会使用params.colorname
参数来对我的mysql
数据库运行错误的查询。
有哪些良好做法可以防止这些事情发生?
答案 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")
。