2010-07-04 15 views
6

मेरा लक्ष्य अंतिम उपयोगकर्ता द्वारा दर्ज HTML लेना है, <script> जैसे कुछ असुरक्षित टैग हटाएं, और इसे दस्तावेज़ में जोड़ें। क्या एचटीएमएल को स्वच्छ करने के लिए किसी को भी एक अच्छी जावास्क्रिप्ट लाइब्रेरी पता है?क्या कोई अच्छी जावास्क्रिप्ट आधारित HTML पार्सिंग लाइब्रेरी उपलब्ध है?

मैं चारों ओर खोज की है और John Resig's HTML parser, Erik Arvidsson's simple html parser, और Google's Caja Sanitizer सहित कुछ ऑनलाइन, पाया, लेकिन मैं अधिक से अधिक जानकारी प्राप्त करने में सक्षम है कि क्या बारे में लोगों को अच्छा अनुभवों इन पुस्तकालयों का उपयोग कर पड़ा है नहीं किया गया है, और मैं चिंतित हूँ कि वे मनमाने ढंग से एचटीएमएल को संभालने के लिए वास्तव में पर्याप्त मजबूत नहीं हैं। क्या मैं स्वच्छता के लिए अपने जावा सर्वर पर HTML भेजना बेहतर होगा?

+4

यह देखते हुए कि सर्वर-साइड पर इसे बेहतर ढंग से संचरित किया जा सकता है, यह अतिरिक्त प्रयास के लायक नहीं हो सकता है। जब तक कि आपके क्लाइंट-साइड सेनिटाइज़र हमेशा आपके सर्वर-साइड के बिना असफल परिणाम देता है, तो शायद यह इसके लायक नहीं है। –

उत्तर

2

आप एचटीएमएल को jQuery के साथ पार्स कर सकते हैं, लेकिन मुझे यकीन है कि स्वच्छता के लिए कोई भी ब्लैकलिस्ट आधारित (यानी फ़िल्टरिंग आउट) असफल होने जा रहा है - आपको शायद "फ़िल्टरिंग" आधारित दृष्टिकोण की आवश्यकता है और अंततः आप नहीं चाहते हैं वैसे भी सुरक्षा के लिए जावास्क्रिप्ट पर भरोसा करने के लिए। संदर्भ के लिए किसी भी मामले में आप इस तरह डोम-पार्स करने के लिए jQuery का उपयोग कर सकते हैं:

var htmlS = "<html>etc.etc."; 
$(htmlS).remove("script"); /* DONT RELY ON THIS FOR SECURITY */ 
+0

अच्छा बिंदु। असल में, आपको शायद * जरूरी * jQuery wrapper की आवश्यकता नहीं है, लेकिन यह चीजों को आसान बना देगा। बस ब्राउजर को पार्सिंग को संभालने दें, और फिर जो कुछ भी आप चाहते हैं उसे करने के लिए उपलब्ध डीओएम विधियों का उपयोग करें। – Matchu

+3

दिमाग बताते हुए कैसे? – icktoofay

+0

@icktoofay yep ने अपना खराब संपादित किया –

2

मैं बेहतर बस सफ़ाई के लिए मेरे जावा सर्वर करने के लिए HTML भेजने होगा?

हां।

फ़िल्टरिंग "असुरक्षित" इनपुट सर्वर-पक्ष किया जाना चाहिए। ऐसा करने का कोई और तरीका नहीं है। क्लाइंट-साइड फ़िल्टर करना संभव नहीं है क्योंकि "क्लाइंट-साइड" एक वेब ब्राउज़र हो सकता है या यह आसानी से एक स्क्रिप्ट के साथ एक बॉट हो सकता है।

+2

असुरक्षित इनपुट फ़िल्टरिंग, हाँ, यह सर्वर पर किया जाना चाहिए क्योंकि क्लाइंट अन्य उपयोगकर्ताओं को फ़िल्टरिंग नहीं कर सकता है जो इसे करना है। यह असुरक्षित आउटपुट को फ़िल्टर कर रहा है, और एक क्लाइंट जो फ़िल्टर नहीं करता है केवल खुद को नुकसान पहुंचाएगा। इसलिए, जावास्क्रिप्ट के साथ ऐसा करना ठीक है। –

+0

@bart "एक क्लाइंट जो फ़िल्टर नहीं करता है केवल खुद को नुकसान पहुंचाएगा। इसलिए, जावास्क्रिप्ट के साथ ऐसा करना ठीक है" <- यह पूरी तरह से सच नहीं है क्योंकि एक समझौता उपयोगकर्ता के पास अन्य उपयोगकर्ताओं को प्रभावित करने की पहुंच हो सकती है –

+0

एक समझौता किया गया उपयोगकर्ता कर सकता है बुरी चीजों के सभी प्रकार। यदि आप सर्वर पर स्क्रिप्ट टैग फ़िल्टर करते हैं तो यह प्रतिपादन करते समय उन्हें वापस रखेगा। या अधिक संभावना है, यह उस असुविधा से परेशान नहीं होगा और केवल बुराई कोड चलाएगा। –

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