2011-07-28 41 views
0

RoR 3自動清理ERB模板(正確完成時)。但是,我有一個小項目,我只將RoR用於應用程序層,而javascript用於演示文稿。所以,典型的請求是ajax調用rails路徑並呈現返回的json。問題是,目前我有可能注入js,創建一個標題爲<script>alert('hello')</script>的新產品,並且按照下一個請求返回,並且瀏覽器愉快地解釋腳本。從Rails消毒JSON的最佳方式

它是最好

  1. 消毒後上的投入?
  2. 清理服務器上的json響應? (覆蓋to_json?)
  3. 消毒客戶端上的json響應?

我很欣賞任何輸入。

回答

1

當您將數據附加到頁面時,您應該在內容客戶端對HTML實體進行編碼。

問題是,您的其他產品字段是否有意包含標記,如鏈接或段落標記,這些標記也將被編碼?如果是這種情況,並且您希望在頁面上將json響應的某些部分呈現爲HTML,那麼您應該在創建新產品時對輸入進行清理,並將您允許的HTML標記限制爲特定的子集,然後擦除它們的屬性。有些庫可以自動執行此過程,如sanitize gem

+0

謝謝你的深思熟慮的迴應。我將有一些模型屬性可能包含用戶提供的標記。所以,我選擇了一個觀察者來清理before_validation。 –

+0

淨化寶石非常棒,但不會在JRuby等其他環境中構建,因爲作者選擇不支持它,所以更詳細的解決方案會更好。 – rcd