2010-12-28 14 views
19

वहाँ जाना जाता है शैली विशेषता XSS हमलों:XSS हमलों और शैली की तरह जिम्मेदार बताते हैं

<DIV STYLE="width: expression(alert('XSS'));"> 

या

<DIV STYLE="background-image: url(javascript:alert('XSS'))"> 

सभी उदाहरण I've seen या तो अभिव्यक्ति या यूआरएल कार्यक्षमता का उपयोग - जैसे कि आवश्यकता होती है मूल रूप से कुछ समारोह " (" तथा ")"।

मैं छानने स्टाइल टैग के विधि निम्न में से सोच रहा हूँ, मैं उन्हें निम्न का उपयोग कर जाँच करेगा (लगभग) व्याकरण:

identifier: [a-zA-Z_][a-zA-Z0-9\-]* 
number: [0-9]+ 
string: '[a-zA-Z_0-9 ]*' 
value : identifier | number | string | number + "(em|px)" | number +"%" 
entry: identifier ":" value (\s value)* 
style: (entry ;)* 

तो मूल रूप से मैं मूल रूप से संख्यात्मक मान या बहुत ही सीमित स्ट्रिंग मूल्यों के साथ ASCII गुण अनुमति देते हैं (फ़ॉन्ट नामों के लिए) कॉल की तरह दिखने वाली किसी भी चीज़ का उपयोग करने की इजाजत नहीं है।

सवाल यह पर्याप्त है? क्या कोई ऐसा हमला है जो ऐसा कुछ कर सकता है:

<DIV STYLE="this-is-js-property: alert 'XSS';"> 

और सफल?

क्या कोई इस तरह के परीक्षण की एक्सएसएस भेद्यता के बारे में सोच सकता है?

यह स्पष्ट

मैं शैली के रूप में TinyMCE जैसे कई उपकरण उन्हें इस्तेमाल और छानने हानिरहित शैली बंद का श्रेय काफी कार्यक्षमता चोट होगा जिम्मेदार बताते हैं की जरूरत है सुनिश्चित करने के लिए।

इसलिए मैं सामान्य मामलों को @import, url, अभिव्यक्ति आदि का उपयोग करने वाली सभी चीजों को हटाने को प्राथमिकता देता हूं और यह भी सुनिश्चित करता हूं कि मूल सीएसएस वाक्यविन्यास ठीक है।

उत्तर

कोई इसे सुरक्षित क्लिक-जैकिंग जोखिम की वजह से नहीं है।

+1

अच्छा काम, इस –

उत्तर

9

यह क्लिक-जैकिंग भेद्यता के कारण काम नहीं करता है।

उदाहरण:

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

में मिला: http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

कोड पूरी तरह से पुष्टि की जाएगी, लेकिन यह गंभीर क्षति हो सकती है।

तो - अंगूठे का नियम बहुत सख्त सफेद सूची का उपयोग करें या शैली विशेषताओं की अनुमति न दें।

+0

अच्छा बिंदु! मुझे लगता है कि हम आजकल रक्षा-जैकिंग भेद्यता के लिए एक्स-फ़्रेम-विकल्प का उपयोग कर सकते हैं। – liweijian

3

वहां एक खुली नींव है जिसे OWASP कहा जाता है जो आपको इससे मदद करता है।

अपने प्रश्न का उत्तर देने के लिए Are there any attacks....; हाँ!

वहां बहुत सारे दस्तावेज हैं, और ऐसे पुस्तकालय हैं जिनका उपयोग आप सभी एक्सएसएस कोड से बचने के लिए कर सकते हैं।

XSS prevention sheet पढ़ें।

+3

के कई आप अधिक विशिष्ट खुश कर सकते हैं पता नहीं था? कोई ** विशिष्ट ** हमला? मैंने इन साइटों की खोज की है और मुझे कुछ भी नहीं मिला जो सीएसएस पहचानकर्ताओं और केवल संख्याओं का उपयोग करके ऐसे हमलों को करने की अनुमति देगा। यही कारण है कि मैं पूछ रहा हूँ। – Artyom

+0

एन्कोडिंग एचटीएमएल के कई तरीके हैं। आप एक के लिए एचटीएमएल इकाइयों का उपयोग कर सकते हैं। ओडब्ल्यूएएसपी दस्तावेज में सभी उदाहरण हैं, और पुस्तकालयों में 'सभी' possibilites –

+0

एचटीएमएल इकाइयों और एन्कोडिंग के अन्य "वायर्ड" तरीकों से सही ढंग से बचने की अनुमति नहीं है क्योंकि आप व्याकरण में देख सकते हैं केवल तारों के बहुत सख्त सबसेट को कुछ भी असामान्य करने की अनुमति है "असामान्य " – Artyom

1

सुरक्षा नियम # 1: यदि आप कम से कम संदेह में हैं, तो मान लें कि एक छेद है।

आप क्या हासिल करने की कोशिश कर रहे हैं? सीएसएस का अविश्वसनीय स्रोत से कौन सी कार्यक्षमता होगी?

+0

शायद एन अविश्वसनीय उपयोगकर्ता द्वारा एक wysiwyg संपादक? –

+0

मेरे मामले में यह एक चर्चा प्रणाली है, जहां लोग कॉमनमार्क + एचटीएमएल में टिप्पणियां पोस्ट कर सकते हैं, और उनमें 'शैली = ...' विशेषताएं शामिल हो सकती हैं। (मैं मूल पोस्टर नहीं हूं, मेरे पास अभी भी एक समान समस्या है।) – KajMagnus

0

हां, आप शैली विशेषताओं के साथ एक्सएसएस हमलों का उपयोग कर सकते हैं।

इन शैलियों एक विशेष jsp पेज में के रूप में हम उन्हें हमारे टैग में घोषित नहीं किया इंजेक्शन थे, लेकिन जब हमारी सुरक्षा समूह द्वारा लेखा परीक्षित के माध्यम से मिल गया:

<img src="<path here>" style=x:ex/**/pression 
(alert(54163)) ".gif" 

मैं एक HTTP फिल्टर का उपयोग कर सोच रहा हूँ इसे रोकने के लिए, लेकिन मैं अभी भी इसमें देख रहा हूं।

हम अपने छिपा इनपुट फ़ील्ड या तो proteccted नहीं था और इस रूप में अच्छी तरह के माध्यम से मिल गया:

<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert 
(54163)) ""> 

Burpsuite जैसे किसी उपकरण के साथ, आप इस तरह टैग में XSS इंजेक्षन करने के लिए मक्खी पर अनुरोध संशोधित कर सकते हैं । हालांकि, ओएसएपीआईपी से ईएसएपीआई एपीआई के साथ, आप सुरक्षा जोड़ सकते हैं। हम जेएसटीएल टैग का उपयोग नहीं कर रहे थे क्योंकि यह पुराना विरासत कोड था, इसलिए यह सबसे अच्छा शॉर्ट टर्म समाधान था।

छिपे हुए इनपुट के लिए मैंने उपयोग किया;

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>" 

तुम भी XSS with the js onload event in an img tag उपयोग कर सकते हैं:

+0

लेकिन आपके मामले की शैली और स्रोत विशेषताओं में ठीक से भाग नहीं लिया गया है यानी वे उद्धरण चिह्नों और उचित ढंग से एन्कोडेड सामग्री के बिना नहीं जा सकते हैं। – Artyom

+0

जो एक्सएसएस मैं दिखाता हूं वे वास्तव में हमारे जेएस कोड के माध्यम से प्राप्त होते हैं। –

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