2010-11-11 5 views
7

से जावास्क्रिप्ट को हटाने का सबसे अच्छा तरीका एचटीएमएल से जावास्क्रिप्ट को हटाने के लिए सबसे अच्छी लाइब्रेरी/दृष्टिकोण क्या है?जावा: एचटीएमएल

उदाहरण के लिए, ले:

<html><body><span onmousemove='doBadXss()'>test</span></body></html> 

और छोड़:

<html><body><span>test</span></body></html> 

मैं DeXSS परियोजना देखें। लेकिन क्या यह जाने का सबसे अच्छा तरीका है?

+0

शायद, इसका उपयोग करने का सबसे आसान तरीका एक्सएसएलटी का उपयोग करना है (एक स्टाइलशीट लिखें जो स्वीकार्य तत्वों और विशेषताओं की प्रतिलिपि बनाता है), लेकिन यह केवल तभी काम करता है जब आपका दस्तावेज़ एक्सएचटीएमएल है (जब तक एक्सएसएलटी के पास HTML मोड नहीं है --- मैं कर सकता हूं ' याद रखें कि कोई है या नहीं)। –

+2

आपने "आईई" के बजाय "आईई" लिखा था मुझे कोई अंत करने के लिए उलझन में! – JasonFruit

+0

@ जेसनफ्रूट: लॉल्ज़! मैं भी उलझन में आया। –

उत्तर

10

जेएसओपी के पास श्वेतसूची पर आधारित HTML को स्वच्छ करने के लिए एक आसान तरीका है। http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

यह एक श्वेतसूची का उपयोग करता है, जो सुरक्षित है तो ब्लैकलिस्ट दृष्टिकोण DeXSS उपयोग करता है। डीएक्सएसएस पृष्ठ से:

अभी भी कई ज्ञात एक्सएसएस हमलों हैं जिन्हें DeXSS अभी तक पता नहीं लगा है।

एक ब्लैकलिस्ट केवल ज्ञात असुरक्षित निर्माण को अस्वीकार करती है, जबकि श्वेतसूची केवल सुरक्षित निर्माण की अनुमति देती है। तो अज्ञात, संभवतः असुरक्षित निर्माण केवल श्वेतसूची के खिलाफ ही संरक्षित किया जाएगा।

+1

जेएसप सरल और प्रभावी लगता है, thx – mtyson

1

सबसे आसान तरीका यह नहीं होगा कि वे पहले स्थान पर हों ... संभवतः यह केवल सरल टैग फ़ील्ड में उपयोग किए जाने वाले बहुत ही सरल टैगों को अनुमति देने और किसी भी प्रकार की विशेषताओं को अस्वीकार करने की अनुमति देगा।

संभवतः वह उत्तर नहीं जिसे आप जा रहे हैं, लेकिन कई मामलों में आप केवल मार्कअप क्षमताओं को प्रदान करना चाहते हैं, पूर्ण संपादन सूट नहीं।


इसी तरह, संपादन के लिए मार्कडाउन जैसे टेक्स्ट-आधारित वाक्यविन्यास प्रदान करना एक और आसान तरीका होगा। (उदाहरण के लिए, एसओ संपादन क्षेत्र का उपयोग करने के कई तरीकों से नहीं। विशेषता के बिना मार्कडाउन सिंटैक्स + सीमित टैग सूची)।

1

आप dom4j http://dom4j.sourceforge.net/dom4j-1.6.1/ की कोशिश कर सकते यह एक डोम पार्सर है (जैसा कि SAX के खिलाफ) और आप आसानी से पार और डोम, को हटाने नोड उदाहरण (या <script> की तरह पूरे तत्व) के लिए onmouseover तरह जिम्मेदार बताते हैं हेरफेर करने के लिए वापस बाहर लिखने से पहले अनुमति देता है, या कहीं स्ट्रीमिंग। इस पर निर्भर करता है कि आपका एचटीएमएल कितना जंगली है, आपको इसे पहले साफ करने की आवश्यकता हो सकती है - jtidy http://jtidy.sourceforge.net/ अच्छा है।

लेकिन स्पष्ट रूप से यह सब कुछ करने में कुछ ओवरहेड शामिल है यदि आप पृष्ठ प्रस्तुत करने के समय में ऐसा कर रहे हैं।