在我的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