2012-08-16 10 views
10

का समर्थन करता है I ASP.NET प्रोजेक्ट में उपयोग करने के लिए एक अच्छा HTML sanitizer ढूंढ रहा हूं। पकड़ यह है कि sanitizer को शैली विशेषताओं का समर्थन करना चाहिए, जिसमें सीएसएस गुण हो सकते हैं, जिन्हें भी स्वच्छ किया जाना चाहिए। अब तक मैं उपयोग करने के लिए एक अच्छा उत्पाद खोजने में सक्षम नहीं है। बुलेट काटने से पहले और अपना खुद का सैनिटाइज़र लिखने से पहले, मैंने सोचा कि मैं यह देखने की कोशिश कर सकता हूं कि यहां लोग क्या उपयोग कर रहे हैं।.NET के लिए HTML Sanitizer जो स्टाइल टैग

पुस्तकालय है कि मैं देखा और अस्वीकार कर दिया गया है:

  • AntiXSS लाइब्रेरी (पुराने संस्करण असुरक्षित, नए संस्करण स्ट्रिप्स स्टाइल टैग है)
  • AntiSamy .NET (unmaintained, .NET में आवश्यक सुविधाओं का अभाव है संस्करण, अप्रचलित निर्भरता)
  • AjaxControlToolkit में HTMLAgilityPackSanitizer (निकल जाता स्टाइल टैग)

आदर्श था प्रक्षालक एक श्वेत सूची के आधार पर करने के लिए किया जाएगा है टी ज्ञात मूल्यों या regexes की सूची के खिलाफ संपत्ति मूल्यों को भी मान्य करता है।

कोई भी मुझे सही दिशा में इंगित करने में सक्षम है?

+0

[एचटीएमएल साफ] (http://tidy.sourceforge.net/) पर पुराना है, लेकिन मैं यह उपयोग किया है सफलता के साथ। – transistor1

+0

मुझे यकीन नहीं है कि यह वही है जो मैं ढूंढ रहा हूं। यहां प्राथमिक लक्ष्य यह सुनिश्चित करना है कि उपयोगकर्ता इनपुट में निष्पादन योग्य स्क्रिप्ट शामिल न हों। एचटीएमएल टिडी अच्छा लग रहा है, लेकिन लगता है कि यह एक बहुत ही अलग उद्देश्य है। –

उत्तर

0

टैथम Oddie ASP.Net एमवीपी - http://blog.tatham.oddie.com.au/2009/06/15/released-xhtml-markup-sanitizer/

मैं अब कुछ ही लोगों को यह संदर्भित किया जाता है। AFAIK नए संस्करण HTMLAgilityPackSanitizer में है बस AntiXSS पर सब कुछ आप चाहते हैं कर सकते हैं नहीं है, लेकिन टैथम के एक भयानक सांकेतिक शब्दों में बदलनेवाला तो यह आप विचारों के बहुत सारे देना चाहिए ...

,

+0

धन्यवाद, लेकिन उनमें से कोई भी मेरे उद्देश्यों के लिए उपयुक्त नहीं है, क्योंकि वे दोनों विशेषताओं को विशेषताओं के भीतर एन्कोड करते हैं। यह सुरक्षा के लिए अच्छा है क्योंकि स्टाइल एट्रिब्यूट में आप बहुत सारे एक्सएसएस हैक्स कर सकते हैं, लेकिन मुझे अच्छी चीजों को अनुमति देने में सक्षम होना चाहिए। :-( –

3

CsQuery पर देखो (मैं कर रहा हूँ जो प्राथमिक लेखक) एचटीएमएल में हेरफेर करने के लिए एक उपकरण के रूप में।

यह एक .NET jQuery पोर्ट है, यह आपको क्लाइंट (एक डोम और jQuery की एपीआई) पर उपयोग की जाने वाली विधियों के माध्यम से HTML तक पूर्ण पहुंच प्रदान करता है। यह आपके स्वयं के sanitizer रोल करने के लिए बहुत आसान बनाता है।

रिक स्ट्राल में हाल ही में एचटीएमएल को स्वच्छ करने के बारे में blog post था। उन्होंने दिखाया कि एचटीएमएल एजिलिटी पैक का उपयोग करके अपने नियमों के साथ इसे कैसे किया जाए, मैंने एक टिप्पणी पोस्ट की जिसमें दिखाया गया कि सीएसQuery के साथ एक ही चीज़ को आसानी से कैसे प्राप्त किया जाए।

CQ doc = CQ.Create(html); 

// creates a grouped selector "iframe,form,script, ..." 
string selector = String.Join(",",BlackList); 

// CsQuery uses the property indexer as a default method, it's identical 
// to the "Select" method and functions like $(...) 

doc[selector].Remove(); 

आप वास्तव में कुछ टैग में सामग्री को नहीं करना चाहते हैं, उदाहरण के लिए: मूल बातें सिर्फ इस, टैग के गणन BlackList दिया जाता है शायद उन टैग्स को स्वरूपित करना जिन्हें आप प्रतिबंधित करना चाहते हैं, आप इसके बजाय jQuery के अनचाहे का उपयोग कर सकते हैं। इसका एक टैग हटाने का प्रभाव होगा लेकिन अपने बच्चों को संरक्षित करेगा।

doc[selector].UnWrap(); 

जब आप पूरा कर:

string cleanHtml = doc.Render(); 

वहाँ जावास्क्रिप्ट घटना विशेषताओं की सफाई के लिए रिक्स 'पोस्ट में अधिक है और इतने पर, लेकिन मूल रूप से CsQuery हेरफेर करने के लिए एक परिचित और आसान तरीका के साथ एक टूलबॉक्स है एचटीएमएल। यह एक स्वच्छता बनाने के लिए काफी आसान होना चाहिए जो आपके इच्छित तरीके से काम करता है।

CsQuery के डोम मॉडल में शैलियों को सीधे एक्सेस करने के तरीकों (जैसे स्ट्रिंग में हेरफेर करने की तुलना में अधिक सुविधाजनक तरीके से) शामिल हैं, अगर आपको कुछ नामांकित शैलियों को हटाने की आवश्यकता है।उदाहरण के लिए आप सभी तत्वों से "font-weight" शैली को दूर कर सकते हैं:

// use the [attribute] selector to target only elements with styles 

foreach (IDomObject element in doc["[style]"]) { 
    if (element.HasStyle("font-weight")) { 
     element.RemoveStyle("font-weight"); 
    } 
} 

CsQuery के प्रमुख कमी अभी प्रलेखन है। यह एपीआई ब्राउज़र डीओएम और jQuery से जितना संभव हो सके मिलान करने के लिए डिज़ाइन किया गया है (jQuery और सी # के बीच दी गई भाषा भिन्नताएं), और सार्वजनिक एपीआई अच्छी तरह से टिप्पणी की जाती है, इसलिए इसे जाने के बाद कोड के लिए पर्याप्त आसान होना चाहिए।

लेकिन कुछ हद तक गैर-मानक विधियां हैं (जैसे "हैस्स्टाइल" और "निकालें स्टाइल") CsQuery के लिए अद्वितीय हैं। यद्यपि जीथ्यूब पर रीडेमे में मूल उपयोग बहुत अच्छी तरह से कवर किया गया है। यह Nuget पर CsQuery के रूप में भी है।

+0

कूल। अगर मैं अपने स्वयं के सैनिटाइज़र को घुमाता हूं, तो यह देखने के लिए एक अच्छा टूल लगता है। –

+0

मैं इसे जाने और अपना श्वेतसूची करने वाला सैनिटाइज़र बनाने जा रहा हूं। मुझे लगता है कि मैं बस एक "सभी" चयनकर्ता का उपयोग करें और फिर मेरे श्वेतसूची में किसी भी नहीं को फिर से खोलें और अनदेखा करें (या संभावित रूप से एक गैर-अनुमानित चयनकर्ता का उपयोग करें यदि वे मौजूद हैं?) – Schneider

+0

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

0

ओपन लैब ब्लॉग पर पोस्ट किए गए HtmlSanitizer को देखने का प्रयास करें: http://roberto.open-lab.com/2010/03/04/a-html-sanitizer-for-c/। यह शैली टैग का समर्थन करता है और एचटीएमएल संपादकों के लिए उपयोग करने के लिए बहुत अच्छा है।

+0

धन्यवाद। यह मैंने सबसे नज़दीकी देखा है, लेकिन मैं ब्लैकलिस्ट दृष्टिकोण का प्रशंसक नहीं हूं। उदाहरण के लिए, यह शैली व्यवहार में "व्यवहार" को वर्जित स्ट्रिंग मानने पर विचार नहीं करता है, भले ही आप व्यवहार के माध्यम से IE में स्क्रिप्ट निष्पादित कर सकें। शायद अन्य चीजें हैं जो आप कर सकते हैं I, और लेखक, के बारे में पता नहीं है। मुझे यह भी चिंता है कि यह HTML को सही तरीके से पार्स नहीं करता है। यह अभी भी काम कर सकता है, लेकिन यदि आप पार्सर को मूर्ख बना सकते हैं (कहें, एक विशेषता मूल्य में ">" अक्षर डालें, तो यह टैग को बंद करने पर विचार करेगा) तो आप sanitizer को मूर्ख बना सकते हैं। –

+0

चूंकि मैं अपनी टिप्पणी संपादित नहीं कर सका, मैं इसे फिर से लिखता हूं: ठीक उसी मामले में मुझे नहीं लगता कि पुस्तकालय को आधार के रूप में चुनने और अपनी आवश्यकताओं को अनुकूलित करने के अलावा कोई और तरीका नहीं है। यह थोड़ा सा काम हो सकता है लेकिन यह वही तरीका है जिसे आप वास्तव में प्राप्त करना चाहते हैं। हमने काम पर ऐसा ही किया (दुख की बात है कि मैं उस कोड को साझा नहीं कर सकता)। – Rutix

+0

हाँ, यही वह है जो मैंने कर लिया है। मैं बस उम्मीद कर रहा था कि एक बेहतर तरीका हो सकता है। –

4

this native .NET HTML Sanitizer project आज़माएं। यह शैली के गुणों को आप समझ सकते हैं (हालांकि यह स्टाइल टैग को आजमाने और संरक्षित नहीं करता है, यह सिर्फ उन्हें हटा देता है)।

इसके अतिरिक्त यह ब्लैकलिस्ट के बजाय श्वेतसूची आधारित है (और यह CsQuery के बजाय एंगलशर्प का उपयोग करता है जिसे अब बहिष्कृत किया गया है)। यह on Nuget भी है!

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