खोज…


क्रॉस साइट स्क्रिप्टिंग (XSS) सुरक्षा

XSS हमलों में एक पृष्ठ में HTML (या JS) कोड को इंजेक्ट करना शामिल है। अधिक जानकारी के लिए देखें क्रॉस साइट स्क्रिप्टिंग क्या है

इस हमले से बचने के लिए, डिफ़ॉल्ट रूप से, Django एक टेम्पलेट चर के माध्यम से पारित तार से बच जाता है।

निम्नलिखित संदर्भ को देखते हुए:

context = {
    'class_name': 'large" style="font-size:4000px',
    'paragraph': (
        "<script type=\"text/javascript\">alert('hello world!');</script>"),
}
<p class="{{ class_name }}">{{ paragraph }}</p>
<!-- Will be rendered as: -->
<p class="large&quot; style=&quot;font-size: 4000px">&lt;script&gt;alert(&#39;hello world!&#39;);&lt;/script&gt;</p>

यदि आपके पास HTML वाले चर हैं जिन पर आप भरोसा करते हैं और वास्तव में प्रस्तुत करना चाहते हैं, तो आपको स्पष्ट रूप से यह कहना होगा कि यह सुरक्षित है:

<p class="{{ class_name|safe }}">{{ paragraph }}</p>
<!-- Will be rendered as: -->
<p class="large" style="font-size: 4000px">&lt;script&gt;alert(&#39;hello world!&#39;);&lt;/script&gt;</p>

यदि आपके पास एक ब्लॉक है जिसमें कई चर हैं जो सभी सुरक्षित हैं, तो आप स्थानीय रूप से ऑटो से बच सकते हैं:

{% autoescape off %}
<p class="{{ class_name }}">{{ paragraph }}</p>
{% endautoescape %}
<!-- Will be rendered as: -->
<p class="large" style="font-size: 4000px"><script>alert('hello world!');</script></p>

आप किसी स्ट्रिंग को टेम्पलेट के बाहर सुरक्षित के रूप में चिह्नित कर सकते हैं:

from django.utils.safestring import mark_safe

context = {
    'class_name': 'large" style="font-size:4000px',
    'paragraph': mark_safe(
        "<script type=\"text/javascript\">alert('hello world!');</script>"),
}
<p class="{{ class_name }}">{{ paragraph }}</p>
<!-- Will be rendered as: -->
<p class="large&quot; style=&quot;font-size: 4000px"><script>alert('hello world!');</script></p>

कुछ Django उपयोगिताओं जैसे कि format_html पहले से ही सुरक्षित के रूप में चिह्नित स्ट्रिंग format_html :

from django.utils.html import format_html

context = {
    'var': format_html('<b>{}</b> {}', 'hello', '<i>world!</i>'),
}
<p>{{ var }}</p>
<!-- Will be rendered as -->
<p><b>hello</b> &lt;i&gt;world!&lt;/i&gt;</p>

क्लिकजैकिंग सुरक्षा

क्लिकजैकिंग एक वेब उपयोगकर्ता को उस पर क्लिक करने से अलग कुछ चीज़ों पर क्लिक करने की एक दुर्भावनापूर्ण तकनीक है जो उपयोगकर्ता को लगता है कि वे उस पर क्लिक कर रहे हैं। और अधिक जानें

क्लिकजैकिंग सुरक्षा को सक्षम करने के लिए, अपने मिडलवेयर कक्षाओं में XFrameOptionsMiddleware जोड़ें। यदि आप इसे नहीं हटाते हैं तो यह पहले से ही होना चाहिए।

# settings.py
MIDDLEWARE_CLASSES = [
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
]

यह मिडलवेयर आपकी सभी प्रतिक्रियाओं के लिए 'एक्स-फ्रेम-ऑप्शंस' हैडर को सेट करता है, जब तक कि स्पष्ट रूप से छूट या पहले से सेट (प्रतिक्रिया में पहले से सेट नहीं होने पर ओवरराइड नहीं)। डिफ़ॉल्ट रूप से इसे "SAMEORIGIN" पर सेट किया जाता है। इसे बदलने के लिए, X_FRAME_OPTIONS सेटिंग का उपयोग करें:

X_FRAME_OPTIONS = 'DENY'

आप प्रति-दृश्य आधार पर डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं।

from django.utils.decorators import method_decorator
from django.views.decorators.clickjacking import (
    xframe_options_exempt, xframe_options_deny, xframe_options_sameorigin,
)

xframe_options_exempt_m = method_decorator(xframe_options_exempt, name='dispatch')

@xframe_options_sameorigin
def my_view(request, *args, **kwargs):
    """Forces 'X-Frame-Options: SAMEORIGIN'."""
    return HttpResponse(...)

@method_decorator(xframe_options_deny, name='dispatch')
class MyView(View):
    """Forces 'X-Frame-Options: DENY'."""

@xframe_options_exempt_m
class MyView(View):
    """Does not set 'X-Frame-Options' header when passing through the
    XFrameOptionsMiddleware.
    """

क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF) प्रोटेक्शन

क्रॉस-साइट अनुरोध जालसाजी, जिसे एक-क्लिक हमले या सत्र सवारी के रूप में भी जाना जाता है और जिसे संक्षिप्त रूप में CSRF या XSRF के रूप में जाना जाता है, एक वेबसाइट का एक प्रकार का दुर्भावनापूर्ण शोषण है, जहां एक उपयोगकर्ता द्वारा अनधिकृत आदेश प्रसारित किए जाते हैं जो वेबसाइट पर भरोसा करता है। और अधिक जानें

CSRF सुरक्षा सक्षम करने के लिए, अपने मिडलवेयर क्लासेस में CsrfViewMiddleware जोड़ें। यह मिडिलवेयर डिफ़ॉल्ट रूप से सक्षम है।

# settings.py
MIDDLEWARE_CLASSES = [
    ...
    'django.middleware.csrf.CsrfViewMiddleware',
    ...
]

यह मिडलवेयर आउटगोइंग रिस्पॉन्स पर कुकी में टोकन सेट करेगा। जब भी कोई आवक अनुरोध असुरक्षित विधि ( GET , HEAD , OPTIONS और TRACE को छोड़कर) का उपयोग करता है, तो कुकी को एक टोकन से मेल खाना चाहिए जो csrfmiddlewaretoken फॉर्म डेटा या X-CsrfToken हैडर के रूप में भेजा जाता है। यह सुनिश्चित करता है कि अनुरोध को शुरू करने वाला ग्राहक कुकी का मालिक भी है और, विस्तार से, (प्रमाणीकृत) सत्र।

यदि अनुरोध HTTPS से अधिक है, तो सख्त संदर्भ जाँच सक्षम है। यदि HTTP_REFERER शीर्षलेख वर्तमान अनुरोध के होस्ट या CSRF_TRUSTED_ORIGINS ( 1.9 में नया ) के होस्ट से मेल नहीं खाता है, तो अनुरोध अस्वीकार कर दिया जाता है।

POST विधि का उपयोग करने वाले प्रपत्रों में टेम्पलेट में CSRF टोकन शामिल होना चाहिए। {% csrf_token %} टेम्पलेट टैग एक छिपे हुए फ़ील्ड को आउटपुट करेगा, और यह सुनिश्चित करेगा कि कुकी प्रतिक्रिया के लिए सेट है:

<form method='POST'>
{% csrf_token %}
...
</form>

CSRF के हमलों के प्रति संवेदनशील व्यक्तिगत विचार @csrf_exempt डेकोरेटर का उपयोग करके मुक्त किए जा सकते हैं:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request, *args, **kwargs):
    """Allows unsafe methods without CSRF protection"""
    return HttpResponse(...)

हालांकि अनुशंसित नहीं है, आप CsrfViewMiddleware को निष्क्रिय कर सकते हैं यदि आपके कई विचार CSRF हमलों के प्रति संवेदनशील नहीं हैं। इस मामले में आप व्यक्तिगत विचारों की सुरक्षा के लिए @csrf_protect डेकोरेटर का उपयोग कर सकते हैं:

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def my_view(request, *args, **kwargs):
    """This view is protected against CSRF attacks if the middleware is disabled"""
    return HttpResponse(...)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow