2009-08-12 179 views
6

在Ruby on Rails中阻止XSS的做法是什麼? 我在網上發現了很多老文檔,大部分時間都是關於使用 h/html_escape助手來轉義來自用戶的任何變量。Ruby on Rails和XSS預防

我從較新的文檔理解,在版本2.0和以上有 消毒方法,其自動地從假想 惡意輸入清潔輸入。這是足夠的還是你在做更多的事情來保護你的 應用程序?

回答

15

h方法仍然是轉義字符串內部所有HTML的方法。您應該在輸出內容的任何地方使用此方法。

<%=h @recipe.description %> 

這種行爲將在Rails的3.會改變目前所有的輸出將被默認逃脫,你將需要明確指定不能逃脫它。與此同時,如果您經常忘記使用此方法,您可能需要查看Safe ERB plugin

sanitize方法是選擇性去除內容中某些標籤的好方法。例如,如果您想允許用戶在添加鏈接時加粗和斜體輸出,則可以執行此操作。

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

正如Oliver提到的,請查看Security Guide瞭解更多信息。

4

至於最佳做法,我想提出以下建議:

  1. 始終使用軌道形成傭工(的form_for等),如果你寫你自己的形式,你打開自己到CSRF攻擊。

  2. 雖然使用h()函數會在文本寫入頁面時轉義文本,但仍然會以保存在數據庫中的XSS漏洞最終結束。在保存時使用XSS_terminate插件條輸入。

  3. 不要忘了你的應用程序運行在一堆其他應用程序(Rails,Apache,MySQL,你選擇的操作系統)上,每個應用程序都有自己的安全問題。

2

Rails的清理方法很不錯,但它不能保證格式良好,而且很可能會因爲安裝基礎而受到攻擊。更好的做法是使用html5lib(真的是最好的,如果不是最快或者最紅寶石的話)或者或者Loofah