Django 2.1 - Clickjacking Protection

क्लिकजैकिंग संरक्षण




django

क्लिकजैकिंग संरक्षण

क्लिकजैकिंग मिडलवेयर और डेकोरेटर्स, clickjacking विरुद्ध उपयोग में आसान सुरक्षा प्रदान करते हैं। इस प्रकार का हमला तब होता है जब एक दुर्भावनापूर्ण साइट किसी उपयोगकर्ता को किसी अन्य साइट के छुपाए गए तत्व पर क्लिक करने में धोखा देती है जिसे उन्होंने एक छिपे हुए फ्रेम या आईफ्रेम में लोड किया है।

क्लिकजैकिंग का एक उदाहरण

मान लीजिए कि एक ऑनलाइन स्टोर में एक पृष्ठ है, जहां एक लॉग इन उपयोगकर्ता आइटम खरीदने के लिए "अभी खरीदें" पर क्लिक कर सकता है। एक उपयोगकर्ता ने सुविधा के लिए हर समय स्टोर में लॉग इन रहने के लिए चुना है। एक हमलावर साइट अपने स्वयं के पन्नों में से एक "आई लाइक पॉनीज़" बटन बना सकती है, और स्टोर के पेज को पारदर्शी आईफ्रेम में लोड कर सकती है जैसे कि "आई लाइक पॉनीज़" बटन पर "बाय नाउ" बटन अदृश्य रूप से ओवरलेड है। यदि उपयोगकर्ता हमलावर की साइट पर जाता है, तो "आई लाइक पॉनीज़" पर क्लिक करने से "अब खरीदें" बटन पर एक अनजाने क्लिक और आइटम की अनजानी खरीद हो जाएगी।

क्लिकजैकिंग को रोकना

आधुनिक ब्राउज़र X-Frame-Options HTTP हेडर का सम्मान करते हैं जो इंगित करता है कि किसी संसाधन को फ़्रेम या आइफ्रेम के भीतर लोड करने की अनुमति है या नहीं। यदि प्रतिक्रिया में SAMEORIGIN मान के साथ हैडर है तो ब्राउज़र केवल संसाधन को एक फ्रेम में लोड करेगा यदि अनुरोध उसी साइट से उत्पन्न हुआ हो। यदि शीर्ष लेख DENY सेट है, तो ब्राउज़र संसाधन को एक फ्रेम में लोड करने से रोक देगा, चाहे जो भी साइट ने अनुरोध किया हो।

अपनी साइट से प्रतिक्रियाओं में इस हेडर को शामिल करने के लिए Django कुछ सरल तरीके प्रदान करता है:

  1. एक साधारण मिडलवेयर जो हेडर को सभी प्रतिक्रियाओं में सेट करता है।
  2. व्यू डेकोरेटर्स का एक सेट जिसका उपयोग मिडलवेयर को ओवरराइड करने के लिए या केवल कुछ दृश्यों के लिए हेडर सेट करने के लिए किया जा सकता है।

X-Frame-Options HTTP हेडर केवल मिडलवेयर या व्यू डेकोरेटर्स द्वारा निर्धारित किया जाएगा यदि यह पहले से ही प्रतिक्रिया में मौजूद नहीं है।

इसे कैसे उपयोग करे

सभी प्रतिक्रियाओं के लिए X-Frame-Options सेट करना

अपनी साइट में सभी प्रतिक्रियाओं के लिए एक ही X-Frame-Options मान सेट करने के लिए, 'django.middleware.clickjacking.XFrameOptionsMiddleware' लिए 'django.middleware.clickjacking.XFrameOptionsMiddleware' MIDDLEWARE

MIDDLEWARE = [
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
]

यह मिडलवेयर startproject द्वारा उत्पन्न सेटिंग्स फ़ाइल में सक्षम है।

डिफ़ॉल्ट रूप से, मिडलवेयर हर आउटगोइंग HttpResponse लिए SAMEORIGIN को X-Frame-Options हेडर सेट करेगा। यदि आप इसके बजाय DENY चाहते हैं, तो X_FRAME_OPTIONS सेटिंग सेट करें:

X_FRAME_OPTIONS = 'DENY'

मिडलवेयर का उपयोग करते समय कुछ विचार हो सकते हैं जहां आप X-Frame-Options हेडर सेट नहीं चाहते हैं। उन मामलों के लिए, आप एक व्यू डेकोरेटर का उपयोग कर सकते हैं जो हेडर को सेट न करने के लिए मिडलवेयर को बताता है:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def ok_to_load_in_a_frame(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

प्रति दृश्य X-Frame-Options सेट करना

X-Frame-Options हेडर को प्रति दृश्य आधार पर सेट करने के लिए, Django इन सज्जाकारों को प्रदान करता है:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin

@xframe_options_deny
def view_one(request):
    return HttpResponse("I won't display in any frame!")

@xframe_options_sameorigin
def view_two(request):
    return HttpResponse("Display in a frame if it's from the same origin as me.")

ध्यान दें कि आप सज्जाकारों को मिडलवेयर के साथ संयोजन में उपयोग कर सकते हैं। एक डेकोरेटर का उपयोग मिडलवेयर को ओवरराइड करता है।

सीमाएं

X-Frame-Options हेडर केवल एक आधुनिक ब्राउज़र में क्लिकजैकिंग से बचाएगा। पुराने ब्राउज़र चुपचाप हेडर को अनदेखा कर देंगे और अन्य क्लिकजैकिंग निरोधक तकनीकों की आवश्यकता होगी।

ब्राउज़र जो X-Frame-Options समर्थन करते हैं

  • इंटरनेट एक्सप्लोरर 8+
  • फ़ायरफ़ॉक्स 3.6.9+
  • ओपेरा 10.5+
  • सफारी 4+
  • क्रोम 4.1+

यह भी देखें

X-Frame-Options समर्थन करने वाले ब्राउज़रों की एक पूरी सूची