在我的 grails 应用程序中,我从中提取文本params
并将其用作域查询中的参数:
例子:
def color = Colors.findByName(params.colorname)
我想有人可以摆弄params.colorname
参数来对我的mysql
数据库运行错误的查询。
有哪些好的做法可以防止此类事情发生?
在我的 grails 应用程序中,我从中提取文本params
并将其用作域查询中的参数:
例子:
def color = Colors.findByName(params.colorname)
我想有人可以摆弄params.colorname
参数来对我的mysql
数据库运行错误的查询。
有哪些好的做法可以防止此类事情发生?
当您在视图中呈现可能包含 XSS 攻击的字段时,您需要将其编码为 HTML。您应该对包含用户输入的所有字段进行编码。所有标准 Grails 标记都编码为 HTML。但是,如果您${}
在视图中使用,那您可能会遇到麻烦。您需要手动对其进行编码,${colorname.encodeAsHTML()}
或者使用标签,fieldValue
如果它是一个 bean 属性。
您还可以使用 in 设置全局默认编解码grails.views.default.codec = "html"
器Config.groovy
。
注意双重编码,并确保在自定义标签中编码为 HTML。
您还参考了与 XSS 攻击不同的 SQL 注入攻击。只有在编写自己的 SQL 或 HQL 并将用户输入直接插入 SQL/HQL 时,才会面临 SQL 注入的风险。这意味着 doColors.executeQuery("from Colors where name like ?", params.colorname)
而不是Colors.executeQuery("from Colors where name like $params.colorname")
.