回答
你可以使用XSS_terminate它過濾數據進入你的應用(上保存),而不是試圖在最後可能的第二次用H抓住它()。
從理論上講,這應該是sufficent,你應該不需要做別的。
如果你想成爲偏執(這在安全方面是不是一件壞事),你應該做兩個。
我已經使用xss_terminate(披露:我寫了它)與Erubis的自動轉義獲得雙重保護,但很難繼續與Rails一起工作,因爲它更新。 xss_terminate並不完美 - 您仍然需要了解從用戶輸入中發佈HTML的情況,但它會在Rails默認情況下大幅降低您的攻擊情況。 – 2009-08-19 06:17:35
DHH(Rails的創建者)同意你的觀點。 Rails 3默認會跳出輸出。
是默認的,但我可能需要鍵入一千小時,然後調用呢:)我試圖找到的寶石或插件,將緩解這一疼痛。 – conor 2009-08-18 14:52:55
我認爲這可能比DHH更多的耶胡達。 ;) – 2009-08-19 06:18:10
你可以使用Erubis作爲你的ERB引擎 - 它確實提供了自動轉義。他們的基準測試將其標記爲ERB的3倍。
http://www.kuwata-lab.com/erubis/
唯一的問題是,它僅適用於僱員再培訓局,因此,如果您Haml的或其他一些模板語言(如美國),那麼你就SOL。我過去使用過Erubis,並沒有遇到任何問題 - 在我們切換到(較慢的)Haml之前。
Rails的3方法絕對是最佳的觀看側的,因爲它明確地跟蹤每一個字符串,它最終是你所需要的(污點模式)強大的解決方案的安全性。
但是還有另一種方法是ActsAsTextiled做的。即重新定義屬性訪問器以清理和緩存結果,以便默認情況下始終得到清理輸出。與xss_terminate方法相比,我喜歡的是它根本不會觸及用戶輸入,因此您可以減少用戶的投訴,並且數據不會意外地被破壞,並且您可以稍後再去更改規則你忽略了一些東西。
我喜歡的方法這麼多,我寫了使用Sanitize寶石ActsAsSanitiled插件。它不會像xss_terminate那樣爲您提供一攬子保護,但它也可以避免不必要的副作用。在我的情況下,相對較少的文本字段實際上是由用戶直接編輯的,所以我更願意審覈它們並明確聲明它們。
- 1. 點:任何解決方法,以避免--allow-external?
- 2. 如何使用SMO連接到Sqlserver2008任何解決方法都必須完成?
- 3. $ gem install rails failing。任何解決方法?
- 4. EJB異常的根本原因。任何聰明的方法?
- 5. 任何避免ShowDialog()阻止Messenger的解決方案?
- 6. 聰明的方法來避免佩林噪音的重複
- 7. 任何避免在Akka伴侶對象中定義道具方法的方法?
- 8. 將方法引入任務以避免阻塞asp.net線程
- 9. 任何辦法避免的JavaScript。那麼()方法
- 10. 錯誤方法'main'必須在'Rextester'類中。任何人都可以解釋
- 11. 插入MULTILINESTRING的任何解決方案?
- 12. 您是否必須在.h文件中聲明overriden @property方法?
- 13. 聰明的方法來CSS3
- 14. 任何避免在打開SqlDataReader時嵌套使用的方法?
- 15. 輸入方法,但不顯示任何
- 16. 註解避免setter方法?
- 17. ASP.NET MaskedEditExtender&TextBox:無法輸入零,解決方法?解決方案?
- 18. 過於複雜的工廠方法 - 任何解決方案?
- 19. 是否有任何有效的解決方案/方法?
- 20. 任何解決protobyname錯誤的解決方法?
- 21. html()方法避免寫入
- 22. 任何解決方法以獲取Data.Dynamics中的多態函數?
- 23. 尋找解決方案,以避免eval()
- 24. PHP GD不支持特定的圖像,任何解決方案/解決方法?
- 25. 在Python中使用編碼方法。任何類似於map()的解決方法?
- 26. String StartsWith()任何避免2次檢查的方法?
- 27. 任何避免for循環的方法? (ES6/JavaScript)
- 28. 任何避免這種類型推斷問題的方法?
- 29. 聰明JavaScript以繞過eval方法
- 30. 避免硬編碼解決方案POST方法
我沒有一個解決方案,但是這將是對Rails 3個 – 2009-08-18 14:47:51