شما می دانید که امنیت وب برای جلوگیری از دسترسی هکرها و سارقان فضای مجازی به اطلاعات ورودی حساس می باشد. بنابراین ، در این پست قصد داریم آسیب پذیری های امنیتی جنگو و چگونگی رفع آنها را بررسی کنیم.
چک لیست استقرار
اول از همه ، دستور زیر را در قسمت پروژه جانگو خود وارد کنید:
Python3 manage.py check --deploy
خروجی به شما توضیحاتی در مورد آسیب پذیری برنامه وب Django ارائه می دهد.
خوب بریم کم کم ببینم چی رو باید رعایت کنیم ✍?
اگر قبلاً برنامه خود را مستقر کرده اید ، از این سایت که توسط سایت موزیلا برای اسکن وضعیت امنیتی سایت استفاده می شود استفاده کنید. این سایت همچنین شامل اسکنرهای شخص ثالث است که سایر جنبه های امنیتی سایت شما را آزمایش می کند. ? ?
مثال اسکن:
محافظت از درخواست جعلی سایت (CSRF)
در یک برنامه وب ، اساساً یک ورودی از کاربر گرفته می شود و آنها را به قسمت های سرور ارسال می کند تا آنها را پردازش کند. اجزای سمت سرور به طور کلی از روشهای POST ، PUT ، DELETE برای پذیرش داده ها از طریق HTTPاستفاده می کنند.جنگو در برابر بیشتر اشکال تهدیدهای CSRF امنیت داخلی ایجاد کرده است.
همانطور که در اسناد ذکر شده است ، هنگام علامت گذاری با دکوراتور csrf_exempt بسیار مراقب باشید ، مگر اینکه کاملاً ضروری باشد. اگر شخصی به کوکی csrftoken شما دسترسی داشته باشد ، آنگاه این یک آسیب پذیری می باشد. محافظت CSRF نمی تواند در برابر حملات انسان محافظت کند ، بنابراین از HTTPS با امنیت حمل و نقل دقیق استفاده کنید.
پس از تنظیم HTTPS ، این خطوط را در تنظیمات خود اضافه کنید.
#to avoid transmitting the CSRF cookie over HTTP accidentally.
CSRF_COOKIE_SECURE = True
#to avoid transmitting the session cookie over HTTP accidentally.
SESSION_COOKIE_SECURE = True
Cross-site Scripting (XSS)
در واقع XSS به یک مهاجم اجازه می دهد تا یک اسکریپت را به محتوای یک وب سایت یا برنامه تزریق کند. وقتی کاربر از صفحه آلوده بازدید می کند ، اسکریپت در مرورگر قربانی اجرا می شود. این به مهاجمان اجازه می دهد تا اطلاعات شخصی مانند کوکی ها ، اطلاعات حساب و غیره را سرقت کنند.
در واقع X-XSS-Protection: 1؛ mode = block فیلتر XSS را امکان پذیر می کند. در صورت شناسایی یک حمله ، مرورگر به جای آن که از صفحه محافظت کند ، از ارائه صفحه جلوگیری می کند.
برای فعال کردن آن در Django ، اطمینان حاصل کنید که django.middleware.security.SecuranceMiddleware در لیست میان افزار موجود است و خطوط زیر را در تنظیمات خود اضافه کنید:
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
یکی از مهمترین چیزهای که Django را ایمن می کند. قبل از استقرار برنامه خود باید admin / مسیر را به/admin تغییر دهید. در غیر این صورت ، شخصی می تواند به راحتی وارد url شود و به صفحه ورود به سیستم مدیریت دسترسی پیدا کند.
#urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls) # change admin something different
]
شما می توانید با استفاده از django-admin-honpot صفحه ورود به سیستم جعلی ایجاد کنید و در صورت تلاش برای دسترسی غیرمجاز به شما اطلاع می دهد.
خط زیر را به تنظیمات خود اضافه کنید تا Django مجبور شود تمام درخواستهای غیر HTTPS را به HTTPS تغییر مسیر دهد.
SECURE_SSL_REDIRECT = True
اگر برنامه Django شما بزرگ است ، حاوی کد زیادی است ، و دارای بسیاری از اسکریپت ها و سبک های درون خطی است که در کل پروژه پراکنده هستند ، پس باید CSP را به سایت خود اضافه کنید.
درDjango یک روش داخلی برای ایجاد یک هدر CSP ندارد ، بنابراین می توانید ماژول django-csp Mozilla را نصب کنید و از کنسول مرورگر خود برای پیگیری نقض امنیتی در کد خود استفاده کنید.
پس از نصب django-csp ، خطوط زیر را به تنظیمات خود اضافه کنید
CSP_DEFAULT_SRC = ("'none'", )
CSP_STYLE_SRC = ("'self'", )
CSP_SCRIPT_SRC = ("'self'", )
CSP_IMG_SRC = ("'self'", )
CSP_FONT_SRC = ("'self'", )
بنابراین ، اساساً ، تمام اسکریپت ها و سبک های درون خطی شما دیگر مجاز نخواهند بود. همه اسکریپت ها و سبک ها باید از یک منبع بارگیری شوند.
پاک کردن کد شما از همه این سبک ها و اسکریپت های درون خطی بسیار مهم است. با این حال ، برخی از منابعی مانند Google Tag Manager یا Google Analytics باید در خط مشی CSP شما مجاز باشد.
کد زیرا رو در فایل تنظیمات قرار دهدید::
CSP_DEFAULT_SRC = ("'none'", )
CSP_STYLE_SRC = ("'self'", "fonts.googleapis.com", "'sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI='")
CSP_SCRIPT_SRC = ("'self'", "ajax.googleapis.com", "www.googletagmanager.com", "www.google-analytics.com")
CSP_IMG_SRC = ("'self'", "data:", "www.googletagmanager.com", "www.google-analytics.com")
CSP_FONT_SRC = ("'self'", "fonts.gstatic.com")
CSP_CONNECT_SRC = ("'self'", )
CSP_OBJECT_SRC = ("'none'", )
CSP_BASE_URI = ("'none'", )
CSP_FRAME_ANCESTORS = ("'none'", )
CSP_FORM_ACTION = ("'self'", )
CSP_INCLUDE_NONCE_IN = ('script-src',)
برای اطلاعات بیشتر در مورد django-csp documentation جست و جو کنید
اگر این خط مشی تنظیم شود ، شما به درستی از منابع HTTPS استفاده نکنید یا اینکه گواهی شما منقضی شده باشد ، مرورگرها از اتصال به سایت شما برای مدت زمانی معین امتناع می ورزند.
خطوط زیر را به تنظیمات خود اضافه کنید:
SECURE_HSTS_SECONDS = 86400 # 1 day
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True