我目前有一個控制器從前端的TinyMCE捕獲一些HTML。如果我用螢火蟲修補,可以提交腳本標記並將警報消息插入到屏幕上。如何最好的消毒軌道上的紅寶石字段
編輯:目前,我在模型中使用了sanitize幫助解決這個:
require 'action_view'
class NotesController < AuthApplicationController
include ActionView::Helpers::SanitizeHelper
...
def update
params[:note][:content] = sanitize(params[:note][:content],
:tags => %w(a object p param h1 h2 h3 h4 h5 h6 br hr ul li img),
:attributes => %w(href name src type value width height data));
@note.update_attributes(params[:note])
這種感覺在控制器中凌亂。有沒有更好的辦法?即以某種方式整合了這個ActiveRecord,所以我可以很容易地指定在對這個和其他字段執行此操作之前,以類似的方式進行驗證?
感謝您的任何建議。
編輯:
在這裏取得了一些進展。
在我的/利布斯我有
module SanitizeUtilities
def sanitize_tiny_mce(field)
ActionController::Base.helpers.sanitize(field,
:tags => %w(a b i strong em p param h1 h2 h3 h4 h5 h6 br hr ul li img),
:attributes => %w(href name src type value width height data));
end
end
然後在我的模型代碼摺疊到
class MyModel < ActiveRecord::Base
include ::SanitizeUtilities
...
before_save :sanitize_content
...
def sanitize_content
self.content = sanitize_tiny_mce(self.content)
end
end
這似乎是掉不想要的標記沒有太過計較。
對軌道很新,很緊張我可能會做錯事。任何人都可以在這裏看到潛在的缺點嗎?
再次感謝
在rails中處理這個問題的更常用的方法是接受來自客戶端的任何垃圾並保存(安全,小心避免SQL注入)。然後在需要展示的時候進行清理。 – noodl
對我來說這似乎很奇怪,爲什麼我會提交髒數據?如果我將數據讀回到多個地方,這會增加錯過清理工作的機會和機會。 – Chris
@noodl同意克里斯在這一個。預先清除數據意味着你只需要進行一次這個過程。不刪除意味着每次顯示數據時都必須執行此過程。就像克里斯說的那樣,你可能忘記保護觀點。 – iwasrobbed