Django
सुरक्षा
खोज…
क्रॉस साइट स्क्रिप्टिंग (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" style="font-size: 4000px"><script>alert('hello world!');</script></p>
यदि आपके पास HTML वाले चर हैं जिन पर आप भरोसा करते हैं और वास्तव में प्रस्तुत करना चाहते हैं, तो आपको स्पष्ट रूप से यह कहना होगा कि यह सुरक्षित है:
<p class="{{ class_name|safe }}">{{ paragraph }}</p>
<!-- Will be rendered as: -->
<p class="large" style="font-size: 4000px"><script>alert('hello world!');</script></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" style="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> <i>world!</i></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(...)