在我的 Grails 应用程序中,我从 params
中提取文本,并将其用作我的域查询中的参数:
示例:
def color = Colors.findByName(params.colorname)
我想象有人可能会修改 params.colorname
参数来对我的 mysql
数据库运行错误查询。
有哪些好的做法可以防止此类事件的发生?
最佳答案
当您在 View 中呈现可能包含 XSS 攻击的字段时,您需要将其编码为 HTML。您应该对包含用户输入的所有字段进行编码。所有标准 Grails 标记都编码为 HTML。如果您使用${}
但从某种角度来看,这就是你可能遇到麻烦的地方。您需要手动对其进行编码,如 ${colorname.encodeAsHTML()}
或使用类似 fieldValue
的标签如果它是一个 bean 属性。
您还可以使用 grails.views.default.codec = "html"
设置全局默认编解码器在Config.groovy
.
注意双重编码,并确保在自定义标记中编码为 HTML。
您还引用了 SQL 注入(inject)攻击,这与 XSS 攻击不同。仅当您编写自己的 SQL 或 HQL 并直接将用户输入插入 SQL/HQL 时,您才会面临 SQL 注入(inject)的风险。这意味着做 Colors.executeQuery("from Colors where name like ?", params.colorname)
而不是Colors.executeQuery("from Colors where name like $params.colorname")
.
关于grails - 如何在 Grails 应用程序中防范 XSS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144905/