متن خبر

چگونه برنامه جنگو خود را ایمن کنید – بهترین روش ها و نمونه کد

چگونه برنامه جنگو خود را ایمن کنید – بهترین روش ها و نمونه کد

شناسهٔ خبر: 473781 -




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

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

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

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

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

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

    هنگامی که با کاربران احراز هویت سر و کار دارید، بهتر است یک احراز هویت کاربر ایمن مانند احراز هویت مبتنی بر رمز عبور، مبتنی بر توکن یا احراز هویت چند عاملی پیاده سازی شود. این تضمین می کند که کاربران خود را بیش از یک بار و زمانی که می خواهند از برنامه شما استفاده کنند تأیید می کنید.

    اگر از احراز هویت مبتنی بر رمز عبور استفاده می کنید، مطمئن شوید که از یک الگوریتم هش قوی مانند تابع make_password جنگو استفاده می کنید تا از ذخیره رمز عبور به صورت متن ساده جلوگیری کنید.

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

    استفاده از احراز هویت مبتنی بر توکن را در نظر بگیرید و یک تایمر انقضا تنظیم کنید تا یک لایه امنیتی دیگر اضافه کنید. این اجازه می دهد تا رمز دسترسی کاربر پس از مدتی مشخص منقضی شود و آنها برای ادامه استفاده از برنامه شما باید هویت خود را دوباره تأیید کنند. توجه داشته باشید که هنگام اجرای این، اطمینان حاصل کنید که تایمر را هر 5 دقیقه، 30 دقیقه یا یک ساعت به پایان نرسانید تا تأثیر منفی بر تجربه کاربر نداشته باشد.

    زمانی که با کاربران سروکار دارید، همیشه یک کنترل دسترسی مبتنی بر نقش (RBAC) را برای اختصاص نقش به هر کاربر اجرا کنید. یعنی کاربران فقط می توانند به ویژگی های کاربر دسترسی داشته باشند و ادمین ها می توانند به کاربر و سایر ویژگی های توسعه یافته دسترسی داشته باشند.

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

اقدامات امنیتی در برابر حملات تزریق 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 با تزریق اسکریپت های مخرب در یک صفحه وب یا برنامه ای که توسط سایر کاربران قابل دسترسی است اتفاق می افتد. اگر فراموش کنید که داده‌های کاربر را تأیید کنید، مرورگرها را از تفسیر محتوای وب خود جلوگیری کنید یا خط‌مشی امنیتی محتوا را حذف کنید، این حملات می‌توانند در پروژه‌های جنگو شما مورد سوء استفاده قرار گیرند.

در اینجا چند روش امنیتی برای جلوگیری از حملات 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 on %} {{ user_input }} {% endautoescape %}
روشن کردن autoescape در کد HTML

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

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

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

    X-Content-Type-Options : این پیکربندی تضمین می‌کند که مرورگرها نوع پاسخ را نمی‌بینند یا حدس نمی‌زنند. MIME برای تعیین فرمت پیام های اینترنتی استفاده می شود.

    Content-Type: text/html: charset=UTF-8 : این پیکربندی تضمین می‌کند که محتوای وب شما به‌عنوان یک HTML رفتار می‌شود و به درستی به عنوان یک کدگذاری می‌شود.

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

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

سیاست امنیتی محتوا (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 را فعال کنید

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    روشی را برای نظارت مستمر برنامه جنگو مستقر شده خود برای شناسایی و پاسخگویی به حوادث امنیتی یا آسیب پذیری در زمان واقعی پیاده سازی کنید.

    چارچوب جنگو، وابستگی ها و کتابخانه های شخص ثالث خود را هر 2 تا 4 ماه یکبار به روز کنید تا پروژه شما به روز باشد و از آخرین وصله های امنیتی استفاده کند و بدون اشکال باشد.

    همچنین می‌توانید گزارش‌گیری را برای نظارت و ثبت تغییرات یا فعالیت‌های مرتبط با امنیت که در پروژه‌هایتان اتفاق می‌افتد، پیاده‌سازی کنید. همچنین می تواند حوادث امنیتی احتمالی را مورد توجه قرار دهد.

نتیجه

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

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

خبرکاو

ارسال نظر

دیدگاه‌ها بسته شده‌اند.


تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است