2

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

例子:

def color = Colors.findByName(params.colorname)

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

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

4

1 回答 1

5

当您在视图中呈现可能包含 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").

于 2013-02-28T20:39:15.843 回答