सं
कुछ टैग (वास्तव में नहीं प्रश्न के बिंदु), HtmlEncode बस सभी XSS हमलों को कवर नहीं करता की अनुमति के अधीन एक तरफ लाना।
उदाहरण के लिए, पर विचार सर्वर द्वारा जेनरेट क्लाइंट-साइड जावास्क्रिप्ट - सर्वर गतिशील रूप से htmlencoded मान आउटपुट करता है सीधे क्लाइंट-साइड जावास्क्रिप्ट में, एचटीएमएलकोड निष्पादित करने से इंजेक्शन स्क्रिप्ट को रोक नहीं पाएगा।
इसके बाद, निम्न स्यूडोकोड पर विचार करें:, अब
<input value=<%= HtmlEncode(somevar) %> id=textbox>
मामले में अपनी तुरंत स्पष्ट नहीं, somevar (बेशक, उपयोगकर्ता द्वारा भेजे गए)
a onclick=alert(document.cookie)
उदाहरण के लिए सेट है, तो परिणामी आउटपुट
<input value=a onclick=alert(document.cookie) id=textbox>
जो स्पष्ट रूप से काम करेगा। जाहिर है, यह (लगभग) किसी भी अन्य स्क्रिप्ट हो सकता है ... और HtmlEncode बहुत मदद नहीं करेगा।
कुछ अतिरिक्त वैक्टर माना जा सकता है ... एक्सएसएस के तीसरे स्वाद सहित, जिसे डोम-आधारित एक्सएसएस कहा जाता है (जिसमें दुर्भावनापूर्ण स्क्रिप्ट क्लाइंट पर गतिशील रूप से उत्पन्न होती है, उदाहरण के लिए # मानों के आधार पर)।
इसके अलावा
UTF-7 प्रकार के हमलों के बारे में भूल नहीं है - जहां हमले
तरह
+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-
वहाँ एन्कोड करने के लिए ज्यादा कुछ नहीं है ...
समाधान, निश्चित रूप से (उचित के अलावा लग रहा है और प्रतिबंधित सफेद-सूची इनपुट सत्यापन), संदर्भ-संवेदनशील एन्कोडिंग करने के लिए है: एचटीएमएल एन्कोडिंग बहुत अच्छा है अगर आप आउटपुट संदर्भ हैं HTML है, या शायद आपको जावास्क्रिप्ट एन्कोडिंग, या VBScriptEncoding, या विशेषता ValueEncoding, या ... आदि
यदि आप एमएस एएसपी.नेट का उपयोग कर रहे हैं, तो आप अपनी एंटी-एक्सएसएस लाइब्रेरी का उपयोग कर सकते हैं, जो सभी आवश्यक संदर्भ-एन्कोडिंग विधियों को प्रदान करता है।
ध्यान दें कि सभी एन्कोडिंग HTTP में दोनों उपयोगकर्ता इनपुट के लिए प्रतिबंधित नहीं किया जाना चाहिए, लेकिन यह भी डेटाबेस, पाठ फ़ाइलें से संग्रहीत मूल्यों, आदि
ओह, और भूल नहीं है स्पष्ट रूप से चारसेट स्थापित करने के लिए, http://ha.ckers.org/xss.html
यह लिखने के लिए पहली जगह गलत है <इनपुट मूल्य = <% = एचटीएमएलएनकोड (कुछवर्स)%> आईडी = पाठ बॉक्स> और नहीं <इनपुट मूल्य = "<% = HtmlEncode (somevar)"%> आईडी = पाठ बॉक्स> यदि आप नहीं जानते कि अगर tekst जैसे शामिल खाली। – Erik
यह बिल्कुल सही बात है - HTMLEncode आपको गलतियों के खिलाफ सुरक्षा नहीं करता है। बेशक, प्रोग्रामर ने उम्मीदवार को 23 रखने की उम्मीद की - यह सिर्फ इतना बुरा हमलावर है जिसने एक खाली स्थानांतरित करने का फैसला किया ... – AviD
यह इसे संलग्न करने में मदद नहीं करेगा, छवि है कि SOMEVAR में यह पाठ शामिल है। "onclick =" चेतावनी(); "" | फिर यह एक वैध टैग की तरह प्रस्तुत करेगा। – Espo