به‌عنوان یک توسعه‌دهنده یا مهندس نرم‌افزار، دانستن روش ساخت راه‌حل‌های مفید کافی نیست – همچنین باید از ایمن بودن آنها اطمینان حاصل کنید. اولویت بندی کاربران هنگام توسعه و استقرار نرم افزار شما بسیار مهم است زیرا اگر کاربران نتوانند از برنامه شما استفاده کنند، بی فایده می شود.

در این راهنما، ما برخی از بهترین اقدامات امنیتی را برای پروژه ایمن جنگو قبل از استقرار بعدی شما مورد بحث قرار خواهیم داد.

بیا یاد بگیریم!

اقدامات امنیتی برای احراز هویت و مجوز

هنگام ساخت یک برنامه جنگو، مدیریت کاربر نیاز به اولویت بندی احراز هویت و مجوز به عنوان اقدامات امنیتی کلیدی دارد.

در اینجا برخی از اقدامات امنیتی هنگام کار آورده شده است روی ویژگی های احراز هویت و مجوز:

  1. هنگامی که با کاربران احراز هویت سر و کار دارید، بهتر است یک احراز هویت کاربر ایمن مانند احراز هویت مبتنی بر رمز عبور، مبتنی بر توکن یا احراز هویت چند عاملی پیاده سازی شود. این تضمین می کند که کاربران خود را بیش از یک بار و زمانی که می خواهند از برنامه شما استفاده کنند تأیید می کنید.
  2. اگر از احراز هویت مبتنی بر رمز عبور استفاده می کنید، مطمئن شوید که از یک الگوریتم هش قوی مانند جنگو استفاده می کنید. make_password عملکردی برای جلوگیری از ذخیره رمز عبور به صورت متن ساده.
  3. هنگام هش کردن رمزهای عبور کاربر، اطمینان حاصل کنید که تولید نمک را اجرا می کنید. یک داده تصادفی منحصر به فرد (نمک) برای تقویت هش ایجاد کنید process رمز عبور و جلوگیری از حملات از پیش محاسبه شده
  4. استفاده از احراز هویت مبتنی بر توکن را در نظر بگیرید و یک تایمر انقضا تنظیم کنید تا یک لایه امنیتی دیگر اضافه کنید. این اجازه می دهد تا رمز دسترسی کاربر پس از مدتی مشخص منقضی شود و آنها برای ادامه استفاده از برنامه شما باید هویت خود را دوباره تأیید کنند. توجه داشته باشید که هنگام اجرای این، اطمینان حاصل کنید که تایمر را هر 5 دقیقه، 30 دقیقه یا یک ساعت منقضی نکنید تا تأثیر منفی بر تجربه کاربر نداشته باشد.
  5. زمانی که با کاربران سروکار دارید، همیشه یک کنترل دسترسی مبتنی بر نقش (RBAC) برای اختصاص نقش به هر کاربر اجرا کنید. یعنی کاربران فقط می توانند به ویژگی های کاربر دسترسی داشته باشند و ادمین ها می توانند به کاربر و سایر ویژگی های توسعه یافته دسترسی داشته باشند.
  6. پس از هش کردن رمز عبور و داشتن کنترل دسترسی، اقدامات کنترل دسترسی و رمزگذاری مناسب را اعمال کنید تا فقط کاربران مجاز بتوانند به رمز عبور خود دسترسی داشته باشند.

اقدامات امنیتی در برابر حملات تزریق SQL

حملات تزریق SQL یکی از آسیب پذیرترین آسیب پذیری های وب هستند و پروژه های جنگو را می توان از طریق چنین حملاتی مورد سوء استفاده قرار داد، به خصوص زمانی که داده های در حال حرکت از سمت مشتری به سمت سرور آسیب پذیر باشند.

پیشنهاد می‌کنیم بخوانید:  روش تکرار بر روی دیکشنری در پایتون

یک راه عالی برای خنثی کردن این حملات در پروژه های جنگو، استفاده از پرس و جوهای پارامتری شده است. پرس و جوهای پارامتری یک راه آسان برای جدا کردن کد SQL از ورودی کاربر است و اطمینان حاصل می کند که داده های کاربر بخشی از دستور SQL با استفاده از ORM های جنگو نیست.

هم اکنون به چگونگی کارکرد آن می پردازیم. شما می توانید مستقیماً داده های موجود در پایگاه داده خود را به صورت زیر جستجو کنید:

from .models import User  

def user_search(request):
    username = request.GET.get('username')
    
    # Vulnerable query construction
    query = "SELECT * FROM users WHERE username="" + username + """

    # Return a response
    return HttpResponse("User search query: " + query)
روش اشتباه برای جمع آوری داده های تولید شده توسط کاربر

می توانید از Django QuerySet استفاده کنید filter() روش فیلتر کردن داده ها و ضدعفونی کردن آنها، مانند زیر:

from .models import User

def user_search(request):
    username = request.GET.get('username')
    
    # Safe query using parameterized query
    users = User.objects.filter(username=username)
    
    # Return a response
    return HttpResponse("User search executed securely.")
استفاده از پرس و جوهای پارامتری شده در داده های تولید شده توسط کاربر

اقدامات امنیتی در برابر اسکریپت بین سایتی (XSS)

اسکریپت بین سایتی یا حمله XSS با تزریق اسکریپت های مخرب در یک وب اتفاق می افتد page یا برنامه ای که توسط سایر کاربران قابل دسترسی است. اگر فراموش کنید که داده‌های کاربر را تأیید کنید، مرورگرها را از تفسیر محتوای وب خود جلوگیری کنید یا خط‌مشی امنیتی محتوا را حذف کنید، می‌توانند در پروژه‌های جنگو شما مورد سوء استفاده قرار گیرند.

در اینجا برخی از اقدامات امنیتی هنگام اجتناب از حملات XSS آورده شده است:

اعتبارسنجی داده های کاربر

هنگامی که با داده های تولید شده توسط کاربر سروکار دارید، اطمینان حاصل کنید که همیشه داده ها را تأیید می کنید. می توانید از ابزارهای اعتبار سنجی داخلی مانند django.core.validators تابع.

در اینجا نمونه ای از اعتبارسنجی یک آدرس ایمیل دریافت شده از سمت مشتری آورده شده است:

from django.core.validators import validate_email

email = request.GET.get('email')

if not validate_email(email):
    raise ValueError("Invalid email address.")
تایید ایمیل کاربر

در اینجا مثال دیگری از اعتبارسنجی URL دریافت شده از کاربر آورده شده است:

from django.core.validators import URLValidator
from django.core.exceptions import ValidationError

def validate_url(url):
    validator = URLValidator()
    try:
        validator(url)
    except ValidationError as e:
        return e.message
    return None
در حال اعتبارسنجی URL دریافت شده از کاربر

هنگام نمایش داده های کاربر، همیشه آن ها را رمزگذاری کنید

اگر پروژه شما داده‌های کاربر را می‌گیرد و نمایش می‌دهد، مطمئن شوید که داده‌ها را با استفاده از الگوی فرار خودکار جنگو به درستی رمزگذاری کرده‌اید. {% autoescape %}. را autoescape از تگ برای بررسی اینکه آیا autoescape است روی یا خاموش اگر هست روی، تضمین می کند که کد HTML موجود در متغیرهای شما فرار می کند.

به عنوان مثال:

{% autoescape روی %}
    {{ user_input }}
{% endautoescape %}
پیچ روی فرار خودکار روی کد HTML

از هدرهای HTTP صحیح استفاده کنید

در پروژه جنگو، همیشه هدرهای HTTP مناسب را تنظیم کنید تا از تفسیر محتوا به عنوان اسکریپت های اجرایی توسط مرورگرها جلوگیری شود. این ممکن است جزئی باشد، اما از حدس زدن نوع پاسخ شما توسط مرورگرها جلوگیری می کند.

در اینجا دو هدر HTTP وجود دارد که می توانید پیاده سازی کنید:

  1. X-Content-Type-Options: این پیکربندی تضمین می‌کند که مرورگرها نوع پاسخ را نمی‌بینند یا حدس نمی‌زنند که پسوندهای ایمیل چند منظوره اینترنتی (MIME) باشد. MIME برای تعیین فرمت پیام های اینترنتی استفاده می شود.
  2. Content-Type: text/html: charset=UTF-8: این پیکربندی تضمین می کند که محتوای وب شما به عنوان یک HTML در نظر گرفته می شود و به درستی به عنوان یک کدگذاری می شود.

برای جلوگیری از حملات XSS می توانید این هدرها را در فایل های قالب خود تعریف کنید.

پیشنهاد می‌کنیم بخوانید:  مرتب سازی آرایه اشیاء بر اساس ویژگی رشته ValueObject ها برای ذخیره مجموعه ای از ویژگی ها استفاده می شود، که هر کدام ممکن است به عنوان رابطه ای بین یک نام (یا کلید) و یک مقدار در نظر گرفته شود - بنابراین، اشیاء مجموعه ای از جفت های کلید-مقدار هستند. در این راهنما، نگاهی به روش مرتب سازی آرایه ای از...

همیشه از سیاست امنیتی محتوا استفاده کنید

سیاست امنیتی محتوا (CSP) یک اقدام امنیتی است که در مرورگرهای وب برای جلوگیری از حملات مخرب، حملات XSS و تزریق داده ها استفاده می شود. این خط مشی به توسعه دهندگان وب اجازه می دهد منابع قابل اعتمادی مانند تصاویر، اسکریپت ها، سبک های CSS و غیره را تعریف کنند. روی، روی پروژه های آنها

سیاست‌های امنیتی محتوا معمولاً از طریق هدرهای HTTP یا متا تگ‌های HTML ارائه می‌شوند تا امنیت برنامه‌های کاربردی وب شما را افزایش دهند.

در پروژه جنگو خود می توانید CSP را به صورت زیر پیاده سازی کنید:

from django.http import HttpResponse

response = HttpResponse("Your content here")
response['Content-Security-Policy'] = "default-src 'self'; script-src 'self' https://trusted-cdn.com;"
پیاده سازی CSP در جنگو

اقدامات امنیتی در برابر جعل درخواست بین سایتی (CSRF)

جعل درخواست های بین سایتی (CSRF) آسیب پذیری است که با فریب دادن کاربران به انجام اقداماتی بر خلاف دانش یا رضایت آنها حمله می کند. این حملات از یک درخواست برای فریب کاربر برای ارسال پیوند یا فرم استفاده می کنند روی یک وب‌سایت یا برنامه وب متفاوت و از آنجایی که درخواست از جلسه تأیید شده کاربر می‌آید، آن را وارد می‌کند و مهاجم به انجام دستکاری داده‌ها یا انجام هرگونه اقدام غیرمجاز دسترسی دارد.

برای جلوگیری از چنین حملاتی در پروژه جنگو خود، می توانید این اقدامات را اجرا کنید:

از محدودیت نرخ مبتنی بر Middleware استفاده کنید

Rate-limiting برای کنترل فرکانس درخواست های ارائه شده توسط سرور، API یا کاربر استفاده می شود. این با داشتن محدودیت کار می کند روی تعداد درخواست هایی که می توان در یک بازه زمانی معین انجام داد.

در پروژه جنگو، ایجاد یا پیاده سازی یک میان افزار سفارشی برای ردیابی و محدود کردن درخواست کاربر، تمرین خوبی است. روی آدرس IP یک کاربر اگر نمی توانید یک میان افزار سفارشی ایجاد کنید، می توانید از بسته محدود کننده django-rate استفاده کنید.

CSRF Middleware را فعال کنید

میان‌افزار جعل درخواست‌های متقابل (CSRF) در جنگو یک ابزار امنیتی داخلی است که با اعتبارسنجی توکن CRSF هنگام درخواست‌ها، مانند زمانی که کاربر می‌خواهد وارد سیستم شود، در برابر حملات CSRF محافظت می‌کند.

این ایده خوبی است که میان افزار CRSF جنگو را در خود فعال کنید تنظیمات.py.

MIDDLEWARE = [
 ...
 'django.middleware.csrf.CsrfViewMiddleware'
 ...
]
افزودن میان افزار CRSF

همیشه از توکن های CRSF استفاده کنید

توکن‌های جعل درخواست متقاطع (CSRF) داده‌های تصادفی هستند که توسط سرور شما تولید می‌شوند و به عنوان فیلدهای مخفی در فرم‌های HTML شما اضافه می‌شوند یا به درخواست‌های AJAX اضافه می‌شوند.

توکن‌های CRSF با میان‌افزار CRSF کار می‌کنند، شما نمی‌توانید از یکی بدون دیگری استفاده کنید. هنگام استفاده از توکن‌های CRSF، جنگو به‌طور خودکار توکن‌ها را هنگام استفاده از آن برای شما کنترل می‌کند {% crsf token %} تگ قالب

<form method="post">
    {% csrf_token %}
    ...
</form>
تعریف توکن CRSF در کد HTML

چک لیست امنیتی جنگو داخلی

بسیاری از توسعه دهندگان این را نمی دانند، اما جنگو یک چک لیست امنیتی داخلی دارد تا اطمینان حاصل کند که پروژه ای کاملاً ایمن شده را اجرا می کنید.

این دستوری است که شما را اسکن می کند تنظیمات.py و بررسی می کند که آیا دستورالعمل های امنیتی جنگو را تصویب می کنید یا آسیب پذیری هایی دارید که هکرها می توانند از آنها سوء استفاده کنند. فرمان است python manage.py check --deploy

هنگامی که دستور را اجرا می کنید، باید همه اخطارها را ببینید و ممکن است برخی از خطاهای پروژه (در صورت وجود خطا) را مشاهده کنید، چیزی شبیه به این:

preencoded.png
اسکرین شات نتایج فرمان را نشان می دهد

سایر اقدامات امنیتی

علاوه بر رویه‌های امنیتی که آسیب‌پذیری‌های وب خاص را هدف قرار می‌دهند، پیاده‌سازی روش‌های جزئی نیز می‌تواند قدرت امنیتی کلی برنامه شما را افزایش دهد.

  1. روشی را برای نظارت مستمر برنامه جنگو مستقر شده خود برای شناسایی و پاسخگویی به حوادث امنیتی یا آسیب پذیری در زمان واقعی پیاده سازی کنید.
  2. چارچوب جنگو، وابستگی‌ها و کتابخانه‌های شخص ثالث خود را هر ۲ تا ۴ ماه یکبار به‌روزرسانی کنید تا پروژه شما به‌روز باشد و از آخرین وصله‌های امنیتی استفاده کند و بدون اشکال باشد.
  3. همچنین می‌توانید برای نظارت و ثبت تغییرات یا فعالیت‌های مرتبط با امنیت که در پروژه‌هایتان اتفاق می‌افتد، لاگ را پیاده‌سازی کنید. همچنین می تواند حوادث امنیتی احتمالی را مورد توجه قرار دهد.

نتیجه

در نتیجه، ایمن سازی یک برنامه جنگو نیاز به توجه زیادی و یک استراتژی چند لایه دارد. این شامل اجرای احراز هویت ایمن، اعتبارسنجی ورودی کاربر، اطمینان از ارتباط سرتاسر رمزگذاری شده (اعم از مشتری به سرور یا کاربر به کاربر) و اعمال معیارهای محدودکننده نرخ است.

این شیوه ها به پروژه ای قوی تر و ایمن تر کمک می کند.