2009-08-18 33 views

回答

3

你可以使用XSS_terminate它過濾數據進入你的應用(上保存),而不是試圖在最後可能的第二次用H抓住它()。

從理論上講,這應該是sufficent,你應該不需要做別的。

如果你想成爲偏執(這在安全方面是不是一件壞事),你應該做兩個。

+1

我已經使用xss_terminate(披露:我寫了它)與Erubis的自動轉義獲得雙重保護,但很難繼續與Rails一起工作,因爲它更新。 xss_terminate並不完美 - 您仍然需要了解從用戶輸入中發佈HTML的情況,但它會在Rails默認情況下大幅降低您的攻擊情況。 – 2009-08-19 06:17:35

4

DHH(Rails的創建者)同意你的觀點。 Rails 3默認會跳出輸出。

+0

是默認的,但我可能需要鍵入一千小時,然後調用呢:)我試圖找到的寶石或插件,將緩解這一疼痛。 – conor 2009-08-18 14:52:55

+0

我認爲這可能比DHH更多的耶胡達。 ;) – 2009-08-19 06:18:10

4

你可以使用Erubis作爲你的ERB引擎 - 它確實提供了自動轉義。他們的基準測試將其標記爲ERB的3倍。

http://www.kuwata-lab.com/erubis/

唯一的問題是,它僅適用於僱員再培訓局,因此,如果您Haml的或其他一些模板語言(如美國),那麼你就SOL。我過去使用過Erubis,並沒有遇到任何問題 - 在我們切換到(較慢的)Haml之前。

+0

很酷。這可能正是我需要的。唯一的問題是,語法是否與erb兼容,所以如果您需要將項目從erubis切換回erb,那會有多痛苦? – conor 2009-08-18 15:00:51

+0

看起來像我以前的問題是沒有意義的,因爲他們都實現eRuby標記語言。至少在理論上這意味着我應該能夠在不改變代碼的情況下來回切換。 – conor 2009-08-18 15:11:35

0

Rails的3方法絕對是最佳的觀看側的,因爲它明確地跟蹤每一個字符串,它最終是你所需要的(污點模式)強大的解決方案的安全性。

但是還有另一種方法是ActsAsTextiled做的。即重新定義屬性訪問器以清理和緩存結果,以便默認情況下始終得到清理輸出。與xss_terminate方法相比,我喜歡的是它根本不會觸及用戶輸入,因此您可以減少用戶的投訴,並且數據不會意外地被破壞,並且您可以稍後再去更改規則你忽略了一些東西。

我喜歡的方法這麼多,我寫了使用Sanitize寶石ActsAsSanitiled插件。它不會像xss_terminate那樣爲您提供一攬子保護,但它也可以避免不必要的副作用。在我的情況下,相對較少的文本字段實際上是由用戶直接編輯的,所以我更願意審覈它們並明確聲明它們。

相關問題