2010-08-05 12 views
19

मैं एचटीएमएल कोड को स्वच्छ करने के लिए कक्षा/उपयोग इत्यादि की तलाश में हूं यानी एक्सएसएस और इसी तरह के हमलों से बचने के लिए खतरनाक टैग, विशेषताओं और मूल्यों को हटा दें।एक्सएसएस हमलों को रोकने के लिए जावा में HTML कोड को कैसे स्वच्छ किया जाए?

मुझे समृद्ध टेक्स्ट एडिटर (जैसे TinyMCE) से एचटीएमएल कोड मिलता है लेकिन इसे TinyMCE सत्यापन ("डेटा सबमिट फॉर्म ऑफ साइट") को कम करने के लिए दुर्भावनापूर्ण तरीके से भेजा जा सकता है।

वहाँ के रूप में सरल कुछ भी PHP में InputFilter के रूप में उपयोग करने के लिए है? बिल्कुल सही समाधान मैं उस तरह काम करता है (प्रक्षालक मान HtmlSanitizer कक्षा में समझाया गया है) की कल्पना कर सकते हैं:

String unsanitized = "...<...>...";   // some potentially 
               // dangerous html here on input 

HtmlSanitizer sat = new HtmlSanitizer();  // sanitizer util class created 

String sanitized = sat.sanitize(unsanitized); // voila - sanitized is safe... 

अद्यतन - सरल समाधान, बेहतर! संभवतः अन्य पुस्तकालयों/ढांचे पर छोटी बाहरी निर्भरताओं के साथ छोटे उपयोग वर्ग - मेरे लिए सबसे अच्छा होगा।


इसके बारे में कैसे?

+0

तो ग्राहकों रूपों जो तब fx के आकार में प्रदर्शित किए जाते हैं प्रस्तुत करने में सक्षम होने के लिए क्या आप मूल रूप से चाहते हैं। एक अतिथि पुस्तक? और आप चाहते हैं कि वे एचटीएमएल का उपयोग करने में सक्षम हों लेकिन आप अभी भी दुर्भावनापूर्ण उपयोगकर्ताओं को हैकिंग-प्रयासों को अवरुद्ध करने में सक्षम होना चाहते हैं? या क्या मुझे यह सब गलत लगता है ...? – Latze

+0

@Latze: मैं (अपने ब्राउज़र के माध्यम से उन) चाहते ग्राहकों (रिच टेक्स्ट संपादक के माध्यम से HTML स्वरूप - TinyMCE) richtext सामग्री प्रस्तुत करने के लिए, लेकिन जाँच करें और किसी भी संभावित खतरनाक (असुरक्षित) सामग्री निकालने के लिए। मुझे नहीं पता कि इस संदर्भ में आप जिस एफएक्स और गेस्टबुक का उल्लेख करते हैं। – WildWezyr

+0

आह! मैं इसे एक शॉट देने, मुझे मिनट – Latze

उत्तर

12

आप OWASP ESAPI for Java है, जो कि इस तरह के आपरेशनों करने के लिए बनाया गया है एक सुरक्षा पुस्तकालय है इस्तेमाल कर सकते हैं।

इतना ही नहीं यह HTML के लिए एनकोडर है, यह भी जावास्क्रिप्ट, सीएसएस और URL एन्कोडिंग प्रदर्शन करने के लिए एनकोडर है। Sample uses of ESAPI ओडब्ल्यूएएसपी द्वारा प्रकाशित एक्सएसएस रोकथाम चीटशीट में पाया जा सकता है।

आप साइट नीति को परिभाषित करने के लिए OWASP AntiSamy प्रोजेक्ट का उपयोग कर सकते हैं जो बताता है कि उपयोगकर्ता द्वारा सबमिट की गई सामग्री में क्या अनुमति है। साइट नीति का बाद में "साफ" HTML प्राप्त करने के लिए उपयोग किया जा सकता है जो वापस प्रदर्शित होता है। आप पर नमूनाTinyMCE policy file पा सकते हैं।

+0

यह मेरी पूरी परियोजना की वास्तुकला के पुनर्निर्माण के लिए की आवश्यकता होगी की एक जोड़ी दे देंगे। मैं इसे करने के लिए तैयार नहीं हूँ। मुझे कई निर्भरताओं के बिना कुछ आसान चाहिए और मेरे कोड को व्यवस्थित करने के तरीके को बदलने की जरूरत नहीं है (मुझे यह पसंद है कि यह अब है)। इसलिए - मुझे काम करने के लिए सिर्फ एक उपयोग कक्षा की आवश्यकता है। मेरा प्रश्न अब उस आवश्यकता को स्पष्ट करने के लिए अद्यतन किया गया है। – WildWezyr

+2

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

+0

हम्म। लगता है कि आप सही हैं! मैंने सोचा कि यह स्ट्रैट्स, वसंत इत्यादि जैसे बड़े और भारी ढांचे हैं और कुछ प्रकार के सर्वलेट फिल्टर के रूप में काम करता है ;-)। शायद नाम में बड़े अक्षरों ("ओडब्ल्यूएएसपी") ने मुझे यहां गुमराह किया। बीटीडब्लू: ओडब्ल्यूएएसपी एंटीसामी की सटीक निर्भरता क्या है - मुझे इसका उपयोग करने के लिए और क्या चाहिए? – WildWezyr

6

एचटीएमएल आदानों बचने बहुत अच्छी तरह से काम करता है। लेकिन कुछ मामलों में व्यवसाय नियमों के लिए आपको HTML से बचने की आवश्यकता नहीं हो सकती है। REGEX का उपयोग कार्य के लिए उपयुक्त नहीं है और इसका उपयोग करके एक अच्छे समाधान के साथ आना बहुत मुश्किल है। http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

यह प्रदान की इनपुट के साथ एक डोम पेड़ बनाता है और previosly एक श्वेतसूची द्वारा अनुमति नहीं किसी भी तत्व फिल्टर:

सबसे अच्छा समाधान मैंने पाया इस्तेमाल किया गया। एपीआई में एचटीएमएल की सफाई के लिए अन्य कार्य भी हैं।

और यह भी javax.validation @SafeHtml (whitelistType =, additionalTags =) के साथ इस्तेमाल किया जा सकता

9

आप OWASP Java HTML Sanitizer कोशिश कर सकते हैं। इसे इस्तेमाल करना बहुत आसान है।

PolicyFactory policy = new HtmlPolicyBuilder() 
    .allowElements("a") 
    .allowUrlProtocols("https") 
    .allowAttributes("href").onElements("a") 
    .requireRelNofollowOnLinks() 
    .build(); 

String safeHTML = policy.sanitize(untrustedHTML); 
3

@ Saljack के answer के लिए धन्यवाद। बस OWASP Java HTML Sanitizer पर विस्तारित करने के लिए। यह मेरे लिए वास्तव में अच्छी तरह से (त्वरित) काम किया। मैंने अभी पोम को निम्नलिखित जोड़ा है।मेरी Maven परियोजना में xml: नवीनतम रिलीज के लिए

<dependency> 
     <groupId>com.googlecode.owasp-java-html-sanitizer</groupId> 
     <artifactId>owasp-java-html-sanitizer</artifactId> 
     <version>20150501.1</version> 
    </dependency> 

चेक here

तब मैं सफ़ाई के लिए इस समारोह कहा:

private String sanitizeHTML(String untrustedHTML){ 
     PolicyFactory policy = new HtmlPolicyBuilder() 
      .allowAttributes("src").onElements("img") 
      .allowAttributes("href").onElements("a") 
      .allowStandardUrlProtocols() 
      .allowElements(
      "a", "img" 
      ).toFactory(); 

     return policy.sanitize(untrustedHTML); 
    } 

अधिक टैग allowElements विधि में अल्पविराम से परे पैरामीटर का विस्तार करके जोड़ा जा सकता है।

बस सेम बंद गुजर डेटा को बचाने के लिए पहले इस पंक्ति जोड़ें:

bean.setHtml(sanitizeHTML(bean.getHtml())); 

यह है कि!

अधिक जटिल तर्क के लिए, यह पुस्तकालय बहुत लचीला है और इसे और अधिक परिष्कृत sanitizing कार्यान्वयन संभाल कर सकते हैं।

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