वर्तमान में मेरे पास फ्रंट एंड पर TinyMCE से कुछ HTML कैप्चर करने वाला नियंत्रक है। अगर मैं फायरबग के साथ टिंकर करता हूं तो स्क्रीन पर स्क्रिप्ट टैग सबमिट करना और चेतावनी संदेश इत्यादि करना संभव है।रेलों पर रूबी में फ़ील्ड को स्वच्छ करने के लिए सबसे अच्छा तरीका
संपादित करें: वर्तमान में मैं स्वच्छ सहायक का उपयोग करके मॉडल में इस फिक्सिंग कर रहा हूँ:
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 को एकीकृत करें ताकि मैं सत्यापन के समान तरीके से सहेजने से पहले इसे और अन्य क्षेत्रों में ऐसा करने के लिए आसानी से निर्दिष्ट कर सकूं?
किसी भी सुझाव के लिए धन्यवाद।
संपादित करें:
यहां कुछ प्रगति करना।
मेरी/Libs के तहत मैं
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
के लिए यह बहुत ज्यादा उपद्रव के बिना अवांछित मार्कअप निकाल देते हैं लगता है।
रेल इतने घबराहट के लिए बहुत नया मैं कुछ गलत कर रहा हूं। क्या कोई यहां संभावित दोषों को देख सकता है?
धन्यवाद फिर से
रेल में इसे संभालने का अधिक सामान्य तरीका क्लाइंट से किसी पुराने बकवास को स्वीकार करना और इसे सहेजना (सुरक्षित रूप से, एसक्यूएल इंजेक्शन से बचने के लिए सावधान) को सहेजना है। फिर बाद में जब यह प्रदर्शित करने का समय आता है, वहां sanitize। – noodl
यह मेरे लिए अजीब लगता है, मैं गंदे डेटा क्यों करना चाहूंगा? यदि मैं कई स्थानों पर डेटा को वापस पढ़ता हूं तो इससे एक स्वच्छता खोने के काम और संभावनाओं में वृद्धि होगी। – Chris
@noodl इस पर क्रिस के साथ सहमत हुए। सामने डेटा को बाहर निकालने का मतलब है कि आपको केवल एक बार इस प्रक्रिया को लागू करना होगा। इसे अलग नहीं करना मतलब है कि जब भी आप डेटा प्रदर्शित करते हैं तो आपको इस प्रक्रिया को लागू करना होगा। और क्रिस ने कहा, आप एक दृश्य की रक्षा करना भूल सकते हैं। – iwasrobbed