validar rails formularios formulario ruby-on-rails ruby-on-rails-3 activerecord tinymce sanitization

ruby on rails - formularios - La mejor manera de desinfectar los campos en ruby ​​on rails



formularios en ruby on rails (2)

Actualmente tengo un controlador que captura algunos html de TinyMCE en la interfaz. Si jugueteo con Firebug, es posible enviar etiquetas de script e inyectar mensajes de alerta, etc. a la pantalla.

edit: actualmente estoy arreglando esto en el modelo usando el sanitize helper:

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])

Esto se siente desordenado en el controlador. ¿Hay una mejor manera? Es decir, de alguna manera integro este ActiveRecord para que pueda especificar fácilmente hacer esto en este y otros campos antes de guardarlo de forma similar a la validación.

Gracias por cualquier sugerencia.

editar:

Haciendo algunos progresos aquí.

En mi / Libs tengo

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

Luego, en mis modelos, el código colapsa para

class MyModel < ActiveRecord::Base include ::SanitizeUtilities ... before_save :sanitize_content ... def sanitize_content self.content = sanitize_tiny_mce(self.content) end end

Esto parece eliminar el marcado no deseado sin demasiado alboroto.

Muy nuevo en los rieles tan nervioso que podría estar haciendo algo mal. ¿Alguien puede ver posibles inconvenientes aquí?

Gracias de nuevo


Creo que la forma en que lo está haciendo está bien, pero si está utilizando before_save , es posible que todavía falle las validaciones (ya que se llama a before_save después de las validaciones). Además, no necesariamente tiene que ponerlo en su propio módulo, podría ser un método privado en su clase.

Algo como:

class MyModel < ActiveRecord::Base before_validation :sanitize_content, :on => :create private def sanitize_content self.content = sanitize_tiny_mce(self.content) end 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


Parece que esta pregunta es respondida, pero para cualquiera que esté interesado en esto, quizás desee considerar el uso de mutadores personalizados para que esto sea más transparente. Algo como:

class MyModel < ActiveRecord::Base def content= content write_attribute(:content, sanitize_tiny_mce(content) end private def sanitize_tiny_mce content 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

Esto asegurará que el contenido se desinfecte cada vez que se modifique.