2011-05-07 7 views
6

मेरा जावास्क्रिप्ट एक क्वेरी स्ट्रिंग से डेटा पढ़ता है और उस डेटा को jQuery.val() का उपयोग करके टेक्स्ट बॉक्स में रखता है।क्वेरी स्ट्रिंग्स से जावास्क्रिप्ट/jQuery XSS संभावित पढ़ने

यह ठीक काम करता है लेकिन मुझे आश्चर्य है कि यह एक्सएसएस हमलों से सुरक्षित है?

क्वेरी स्ट्रिंग की तरह दिखाई देता कहो ...

site.com?q="javascript:alert(document.cookie)

जो प्रभावी रूप से करना होगा:

jQuery.val('"javascript:alert(document.cookie)')

मैं क्या IE8/फ़ायरफ़ॉक्स में परीक्षण किया है इस से इनपुट मूल्य सेट जैसा कि देखा और वास्तविक इंजेक्शन नहीं करता है।

अगर मैं स्ट्रिंग पहली बार में इस समारोह चलाएँ:

function htmlEncode(str) { 
    return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;'); 
} 

तो फिर तुम सचमुच &quot;javascript:alert(document.cookie) इनपुट मूल्य जो नहीं है जो मैं चाहता में देखते हैं।

jQuery 1.5.2 का उपयोग करना मुझे लगता है कि मेरा प्रश्न jQuery.val() आपके लिए HTML इकाइयों को संभालता है और इसलिए सुरक्षित माना जाता है?

उत्तर

8

को देखते हुए निम्नलिखित:

jQuery("#SomeTextbox").val("new value for SomeTextbox") 

val समारोह के लिए jQuery कोड बस करता है:

this.value = "new value for SomeTextbox"; 

जहां this उस के साथ पाठ बॉक्स का प्रतिनिधित्व करता है डोम में Text वस्तु के लिए एक संदर्भ है आईडी "कुछ टेक्स्टबॉक्स"। स्ट्रिंग "new value for SomeTextbox" उस DOM ऑब्जेक्ट की value संपत्ति के रूप में संग्रहीत है। यह किसी भी तरह से परिवर्तित या sanitized नहीं मिलता है। लेकिन इसे जावास्क्रिप्ट इंजन द्वारा पार्स/व्याख्या नहीं किया जाता है (उदाहरण के लिए यह InnerHTML के साथ होगा)। तो val पर आपका तर्क क्या है, यह किसी भी चीज़ को "करने" नहीं जा रहा है। यह सिर्फ डीओएम में किसी ऑब्जेक्ट की स्ट्रिंग प्रॉपर्टी के मान को बदलता है। तो, हाँ, यह सुरक्षित होगा।

संपादित करें:

यहां कुछ अतिरिक्त जानकारी है कि आप उपयोगी मिल सकता है है।

सामान्य रूप से, टेक्स्ट बॉक्स में कुछ डालना, इससे कोई फर्क नहीं पड़ता कि यह कितना दुर्भावनापूर्ण हो सकता है, और चाहे वह वहां कैसे हो, "सुरक्षित" है जब तक कि टेक्स्ट बॉक्स में रहता है। लेकिन यह बहुत मायने रखता है जहां यह वहां से जाता है।

यदि टेक्स्टबॉक्स की सामग्री बाद में पार्स किए गए HTML की स्ट्रीम में प्रस्तुत की जाती है, तो यह अब सुरक्षित नहीं है। एक सामान्य परिदृश्य डेटाबेस में किसी टेक्स्टबॉक्स की सामग्री को संग्रहीत करना है, फिर इसे बाद में पुनर्प्राप्त करें और इसे उस संदर्भ में प्रस्तुत करें जहां ब्राउज़र पार्स HTML के रूप में है। यदि किसी भिन्न उपयोगकर्ता के संदर्भ में पुनः प्रदर्शन होता है, तो यह किसी दुर्भावनापूर्ण उपयोगकर्ता को भविष्य में किसी अन्य उपयोगकर्ता की निजी जानकारी तक पहुंच प्राप्त करने के लिए टेक्स्टबॉक्स में डेटा दर्ज करने का अवसर बनाता है।

+0

@ फ़ायर - ऊपर दिए गए उत्तर को पोस्ट करने के बाद, मैंने कुछ और सोचा जो आपको उपयोगी लगेगा।यद्यपि आपने पहले से ही अपना मूल उत्तर स्वीकार कर लिया है, फिर भी मैंने अतिरिक्त सामग्री को पोस्ट करने का फैसला किया है, क्योंकि मुझे लगता है कि यह एक गहन प्रश्न का उत्तर दे सकता है जो आपने पूछा था। हैकर्स को बेकार रखने में शुभकामनाएँ !! –

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