2009-02-01 18 views
5

अब मैं कुछ बेवकूफ स्थिति में भाग गया। मैं चाहता हूं कि उपयोगकर्ता कपड़ा का उपयोग करने में सक्षम हों, लेकिन उन्हें अपनी प्रविष्टि के आस-पास मेरे वैध HTML के साथ गड़बड़ नहीं करनी चाहिए। तो मुझे किसी भी तरह से एचटीएमएल से बचना है।मैं एचटीएमएल को कपड़ा और स्वच्छ कैसे बना सकता हूं?

  • html_escape(textilize("</body>Foo")) कपड़ा टूट जाएगा, जबकि

  • textilize(html_escape("</body>Foo")) काम करेगा, लेकिन लिंक ("Linkname":http://www.wheretogo.com/ की तरह लिखा) जैसे विभिन्न वस्त्र सुविधाओं टूट जाता है, के बाद से उद्धरण &quot; के रूप में तब्दील किया जाएगा और इस तरह अब और कपड़ा नहीं पहचान पातीं।

  • sanitize बेहतर काम नहीं करता है।

उस पर कोई सुझाव? मैं इस समस्या के लिए Tidy का उपयोग नहीं करना चाहूंगा। अग्रिम धन्यवाद।

उत्तर

7

उन लोगों के लिए जो एक ही समस्या में भागते हैं: यदि आप रेडक्लोथ मणि का उपयोग कर रहे हैं तो आप बस अपनी खुद की विधि (अपने सहायकों में से एक को परिभाषित कर सकते हैं) को परिभाषित कर सकते हैं। प्रलेखन से

 
def safe_textilize(s) 
    if s && s.respond_to?(:to_s) 
    doc = RedCloth.new(s.to_s) 
    doc.filter_html = true 
    doc.to_html 
    end 
end 

अंश: सुरक्षा प्रतिबंधों की स्थापना के लिए

पहुंचकर्ता।

यह एक अच्छी बात है यदि आप सार्वजनिक स्थानों (उदा। विकिस) में स्वरूपण के लिए रेडक्लोथ का उपयोग कर रहे हैं, जहां आप नहीं चाहते हैं कि उपयोगकर्ता खराब चीजों के लिए HTML का दुरुपयोग करें।

यदि filter_html सेट है, तो HTML प्रोसेसर द्वारा बनाए गए HTML को से बच जाएगा। वैकल्पिक रूप से, यदि sanitize_html सेट किया गया है, तो HTML वस्त्र प्रोसेसर से गुज़र सकता है लेकिन अनधिकृत टैग और विशेषताओं को हटा दिया जाएगा।

+1

लेकिन पूर्व और कोड टैग शोषण से सावधान रहें। जैसे। (क्या मुझे यह जोखिम है?)

!!!!mouse trap!!!!

0

ऐसा लगता है कि कपड़ा बस आप जो चाहते हैं उसका समर्थन नहीं करता है।

आप वास्तव में केवल HTML के सावधानी से नियंत्रित सबसेट की अनुमति देना चाहते हैं, लेकिन कपड़ा को मनमाने ढंग से HTML की अनुमति देने के लिए डिज़ाइन किया गया है। मुझे नहीं लगता कि आप इस स्थिति में कपड़ा का उपयोग कर सकते हैं (जब तक कि वह उस तरह के प्रतिबंध का समर्थन नहीं करता)।

आपको जो चाहिए वह शायद वस्त्र का एक विशेष "प्रतिबंधित" संस्करण है, जो केवल "सुरक्षित" मार्कअप (परिभाषित करता है कि हालांकि यह पहले से ही मुश्किल हो सकता है)। हालांकि, मुझे नहीं पता कि यह मौजूद है या नहीं।

आप BBCode पर एक नज़र डाल सकते हैं, जो संभावित मार्कअप को प्रतिबंधित करने की अनुमति देता है।

+0

नहीं है मार्कडाउन (जो स्टैक ओवरफ्लो उपयोग करता है), http://daringfireball.net/projects/markdown/ –

+0

हाँ, मार्कडाउन के बारे में भी सोचा। लेकिन AFAIK स्टैक ओवरफ्लो अतिरिक्त भागने (जेफ के कुछ ब्लॉगपोस्ट ने इंगित किया है)। मार्कडाउन भी मनमाने ढंग से एचटीएमएल की अनुमति देता है। –

+0

@ डेविड ज़ास्लावस्की: आधिकारिक वेबसाइट (http://daringfireball.net/projects/markdown/syntax#overview) से पढ़ें: "मार्कडाउन के सिंटैक्स द्वारा कवर नहीं किए गए किसी भी मार्कअप के लिए, आप बस HTML का उपयोग करते हैं।" – Vanuan

2

यह मैं onmouse ... पूर्व और कोड ब्लॉकों में संचालकों सहित कोशिश की है कि हर XSS हमले के खिलाफ मेरे और गार्ड के लिए काम करता है:

<%= RedCloth.new(sanitize(@comment.body), [:filter_html, :filter_styles, :filter_classes, :filter_ids]).to_html -%> 

प्रारंभिक स्वच्छ सहित कारनामे के संभावित XSS का एक बहुत निकालता है माउसओवर।

जहाँ तक मैं कह सकता हूं: filter_html कोड और पूर्व के अलावा अधिकांश HTML टैग से बच निकलता है।अन्य फ़िल्टर वहां हैं क्योंकि मैं नहीं चाहता कि उपयोगकर्ता किसी भी कक्षा, आईडी और शैलियों को लागू कर सकें।

मैं सिर्फ अपने उदाहरण

"</body>Foo" 

साथ मेरी टिप्पणी पेज परीक्षण किया है और यह पूरी तरह से दुष्ट शरीर टैग

हटाया मैं Redcloth संस्करण 4.2.3 और रेल संस्करण का उपयोग कर रहा 2.3.5

संबंधित मुद्दे