在我的Grails应用程序,我正在从params
提取文本,并将它作为我的域名查询参数:如何防止Grails的应用XSS攻击
例子:
def color = Colors.findByName(params.colorname)
我想象有人可以拨打params.colorname
参数来针对我的mysql
数据库运行错误的查询。
什么是一些好的做法,以防止这样的事情?
在我的Grails应用程序,我正在从params
提取文本,并将它作为我的域名查询参数:如何防止Grails的应用XSS攻击
例子:
def color = Colors.findByName(params.colorname)
我想象有人可以拨打params.colorname
参数来针对我的mysql
数据库运行错误的查询。
什么是一些好的做法,以防止这样的事情?
在视图中呈现可能包含XSS攻击的字段时,需要将其编码为HTML。你应该让所有包含用户输入的字段都被编码。所有的标准Grails标签都是用HTML编码的。如果您在视图中使用${}
,那么您可能会遇到麻烦。您需要手动将其编码为${colorname.encodeAsHTML()}
,或者使用类似fieldValue
的标签(如果它是一个bean属性)。
您还可以在Config.groovy
中设置grails.views.default.codec = "html"
的全局默认编解码器。
小心双重编码,并确保您在自定义标记中将其编码为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")
。
我相信你正在考虑[SQL注入](http://en.wikipedia.org/wiki/Sql_injection)而不是[XSS](http://en.wikipedia.org/wiki/Cross-site_scripting) ? – hsan 2013-02-28 22:09:38
Html清理插件可以帮助消除用户输入的消毒http://nimavat.me/blog/sanitize-user-input-with-html-cleaner-plugin – 2017-08-10 05:52:20