TL; DR: सभी अच्छी तरह से लिखी गई वेब साइटों (/ ऐप्स) को हेडर का उत्सर्जन करना होता है X-XSS-Protection: 0
और बस इस सुविधा के बारे में भूल जाते हैं। यदि आप अतिरिक्त सुरक्षा चाहते हैं जो बेहतर उपयोगकर्ता एजेंट प्रदान कर सकते हैं, तो एक सख्त Content-Security-Policy
हेडर का उपयोग करें ।
लंबा जवाब:
HTTP हेडर X-XSS-Protection
उन चीजों में से एक है जो Microsoft ने इंटरनेट एक्सप्लोरर 8.0 (MSIE 8) में पेश की थी जो गलत तरीके से लिखे गए वेब साइटों की सुरक्षा में सुधार करने वाली थी।
प्रतिबिंब XSS हमले का पता लगाने की कोशिश करने और स्वचालित रूप से हमले को कम करने के लिए विचार करने के लिए किसी तरह के अनुमान लगाने के लिए विचार है।
इसका समस्याग्रस्त हिस्सा "हेयुरिस्टिक्स" और "न्यूट्रिंग" है। हेयर्सिस्टिक्स के कारण झूठी सकारात्मकता और न्यूट्रिंग को सुरक्षित रूप से नहीं किया जा सकता है क्योंकि यह साइड-इफेक्ट का कारण बनता है जो कि XSS हमलों और DoS हमलों को पूरी तरह से सुरक्षित वेब साइटों पर लागू करने के लिए इस्तेमाल किया जा सकता है।
खराब हिस्सा यह है कि यदि कोई वेब साइट हेडर का उत्सर्जन नहीं करता है X-XSS-Protection
तो ब्राउज़र ऐसा व्यवहार करेगा जैसे हेडर X-XSS-Protection: 1
को उत्सर्जित किया गया था। इससे भी बुरी बात यह है कि यह हेडर इस हेडर के लिए सभी संभावित मूल्यों का सबसे कम-सुरक्षित मूल्य है!
किसी दिए गए सुरक्षित वेब साइट के लिए (अर्थात, साइट में प्रतिबिंब XSS भेद्यता नहीं है) यह "XSS सुरक्षा" सुविधा निम्नलिखित वाक्यों की अनुमति देती है :
X-XSS-Protection: 1
हमलावर को जावास्क्रिप्ट के चुनिंदा हिस्सों को ब्लॉक करने और बाकी स्क्रिप्ट को चालू रखने की अनुमति देता है। यह संभव है क्योंकि इस सुविधा के उत्तराधिकार केवल "यदि किसी जीईटी पैरामीटर का मान पृष्ठ स्रोत के स्क्रिप्टिंग भाग में पाया जाता है, तो स्क्रिप्ट स्वचालित रूप से उपयोगकर्ता एजेंट निर्भर तरीके से संशोधित हो जाएगी"। व्यवहार में, हमलावर उदाहरण के लिए पैरामीटर जोड़ सकता है disablexss=<script src="framebuster.js"
और ब्राउज़र स्वचालित रूप <script src="framebuster.js"
से वास्तविक पृष्ठ स्रोत से स्ट्रिंग को हटा देगा । ध्यान दें कि शेष पृष्ठ चलता रहता है और हमलावर ने पृष्ठ सुरक्षा के इस हिस्से को हटा दिया। व्यवहार में, पृष्ठ स्रोत में किसी भी जेएस को संशोधित किया जा सकता है। कुछ मामलों के लिए, XSS भेद्यता वाले पृष्ठ परिलक्षित होने वाली सामग्री का उपयोग न्यूट्रिंग के कारण पृष्ठ पर चयनित जावास्क्रिप्ट को चलाने के लिए किया जा सकता है गलत तरीके से सादे पाठ डेटा को निष्पादन योग्य जावास्क्रिप्ट कोड में बदल देगा ।
X-XSS-Protection: 1; mode=block
पेज-साइड के रूप में पेज के व्यवहार का उपयोग करके हमलावर को पृष्ठ स्रोत से डेटा लीक करने की अनुमति देता है। उदाहरण के लिए, यदि पृष्ठ में जावास्क्रिप्ट कोड शामिल है var csrf_secret="521231347843"
, की तर्ज पर , हमलावर बस एक अतिरिक्त पैरा उदाहरण जोड़ता है leak=var%20csrf_secret="3
और यदि पृष्ठ अवरुद्ध नहीं है, तो 3
पहला अंक गलत था। हमलावर फिर से कोशिश करता है, इस बार leak=var%20csrf_secret="5
और पेज लोड हो रहा है। यह हमलावर को यह जानने की अनुमति देता है कि गुप्त का पहला अंक है 5
। इसके बाद हमलावर अगले अंक का अनुमान लगाता है।
अंत में, यदि आपकी साइट XSS प्रतिबिंब हमलों से भरी है, तो डिफ़ॉल्ट मान का उपयोग 1
करने से हमले की सतह थोड़ी कम हो जाएगी। हालाँकि, यदि आपकी साइट सुरक्षित है और आप उत्सर्जन नहीं करते हैं X-XSS-Protection: 0
, तो आपकी साइट इस सुविधा का समर्थन करने वाले किसी भी ब्राउज़र के साथ असुरक्षित होगी।यदि आप अपनी साइट पर अभी तक अज्ञात XSS कमजोरियों के खिलाफ ब्राउज़र से गहराई से समर्थन चाहते हैं, तो एक सख्त Content-Security-Policy
हेडर का उपयोग करें । यह आपकी साइट को ज्ञात कमजोरियों के लिए नहीं खोलता है।
वर्तमान में यह सुविधा MSIE, Safari और Google Chrome में डिफ़ॉल्ट रूप से सक्षम है। यह एज में सक्षम हुआ करता था लेकिन Microsoft ने एज से इस गलत सुविधा को पहले ही हटा दिया था । मोज़िला फ़ायरफ़ॉक्स ने इसे कभी लागू नहीं किया।
यह सभी देखें:
https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html
https://blog.innerht.ml/the-misunderstood-x-xss-protection-
http: / /p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf
https://www.slideshare.net/masatokinugawa/xxn-en
https://bugs.chromium.org/pp-chromium/issues/detail?id=396544
https: // bugs.chromium.org/p/chromium/issues/detail?id=498982