چگونه برنامه جنگو خود را ایمن کنید – بهترین روش ها و نمونه کد
بهعنوان یک توسعهدهنده یا مهندس نرمافزار، دانستن چگونگی ساخت راهحلهای مفید کافی نیست – همچنین باید از ایمن بودن آنها اطمینان حاصل کنید. اولویت بندی کاربران هنگام توسعه و استقرار نرم افزار شما بسیار مهم است زیرا اگر کاربران نتوانند از برنامه شما استفاده کنند، بی فایده می شود.
در این راهنما، ما برخی از بهترین اقدامات امنیتی را برای پروژه ایمن جنگو قبل از استقرار بعدی شما مورد بحث قرار خواهیم داد.
بیا یاد بگیریم!
اقدامات امنیتی برای احراز هویت و مجوز
هنگام ساخت یک برنامه جنگو، مدیریت کاربر نیاز به اولویت بندی احراز هویت و مجوز به عنوان اقدامات امنیتی کلیدی دارد.
در اینجا برخی از اقدامات امنیتی هنگام کار بر روی ویژگی های احراز هویت و مجوز وجود دارد:
هنگامی که با کاربران احراز هویت سر و کار دارید، بهتر است یک احراز هویت کاربر ایمن مانند احراز هویت مبتنی بر رمز عبور، مبتنی بر توکن یا احراز هویت چند عاملی پیاده سازی شود. این تضمین می کند که کاربران خود را بیش از یک بار و زمانی که می خواهند از برنامه شما استفاده کنند تأیید می کنید.
اگر از احراز هویت مبتنی بر رمز عبور استفاده می کنید، مطمئن شوید که از یک الگوریتم هش قوی مانند تابع make_password
جنگو استفاده می کنید تا از ذخیره رمز عبور به صورت متن ساده جلوگیری کنید.
هنگام هش کردن رمزهای عبور کاربر، اطمینان حاصل کنید که تولید نمک را اجرا می کنید. برای تقویت فرآیند هش رمز عبور و جلوگیری از حملات از پیش محاسبه شده، یک داده تصادفی منحصر به فرد (نمک) ایجاد کنید.
استفاده از احراز هویت مبتنی بر توکن را در نظر بگیرید و یک تایمر انقضا تنظیم کنید تا یک لایه امنیتی دیگر اضافه کنید. این اجازه می دهد تا رمز دسترسی کاربر پس از مدتی مشخص منقضی شود و آنها برای ادامه استفاده از برنامه شما باید هویت خود را دوباره تأیید کنند. توجه داشته باشید که هنگام اجرای این، اطمینان حاصل کنید که تایمر را هر 5 دقیقه، 30 دقیقه یا یک ساعت به پایان نرسانید تا تأثیر منفی بر تجربه کاربر نداشته باشد.
زمانی که با کاربران سروکار دارید، همیشه یک کنترل دسترسی مبتنی بر نقش (RBAC) را برای اختصاص نقش به هر کاربر اجرا کنید. یعنی کاربران فقط می توانند به ویژگی های کاربر دسترسی داشته باشند و ادمین ها می توانند به کاربر و سایر ویژگی های توسعه یافته دسترسی داشته باشند.
پس از هش کردن رمز عبور و داشتن کنترل دسترسی، اقدامات کنترل دسترسی و رمزگذاری مناسب را اعمال کنید تا فقط کاربران مجاز بتوانند به رمز عبور خود دسترسی داشته باشند.
اقدامات امنیتی در برابر حملات تزریق SQL
حملات تزریق SQL یکی از آسیب پذیرترین آسیب پذیری های وب هستند و پروژه های جنگو را می توان از طریق چنین حملاتی مورد سوء استفاده قرار داد، به خصوص زمانی که داده های در حال حرکت از سمت مشتری به سمت سرور آسیب پذیر باشند.
یک راه عالی برای خنثی کردن این حملات در پروژه های جنگو، استفاده از پرس و جوهای پارامتری شده است. پرس و جوهای پارامتری یک راه آسان برای جدا کردن کد SQL از ورودی کاربر است و اطمینان حاصل می کند که داده های کاربر بخشی از دستور SQL با استفاده از ORM های جنگو نیست.
هم اکنون به چگونگی کارکرد آن می پردازیم. شما می توانید مستقیماً داده های موجود در پایگاه داده خود را به صورت زیر جستجو کنید:
میتوانید از متد Django QuerySet filter()
برای فیلتر کردن دادهها و پاکسازی آنها استفاده کنید، مانند این:
اقدامات امنیتی در برابر اسکریپت بین سایتی (XSS)
اسکریپت بین سایتی یا حمله XSS با تزریق اسکریپت های مخرب در یک صفحه وب یا برنامه ای که توسط سایر کاربران قابل دسترسی است اتفاق می افتد. اگر فراموش کنید که دادههای کاربر را تأیید کنید، مرورگرها را از تفسیر محتوای وب خود جلوگیری کنید یا خطمشی امنیتی محتوا را حذف کنید، این حملات میتوانند در پروژههای جنگو شما مورد سوء استفاده قرار گیرند.
در اینجا چند روش امنیتی برای جلوگیری از حملات XSS آورده شده است:
اعتبارسنجی داده های کاربر
هنگامی که با داده های تولید شده توسط کاربر سروکار دارید، اطمینان حاصل کنید که همیشه داده ها را تأیید می کنید. می توانید از ابزارهای اعتبار سنجی داخلی مانند تابع django.core.validators
استفاده کنید.
بیشتر بخوانید
تبلیغ ویدیویی اپل برای آیپد پرو با موجی از انتقادات کاربران و هنرمندان مواجه شد [تماشا کنید]
در اینجا نمونه ای از اعتبارسنجی یک آدرس ایمیل دریافت شده از سمت مشتری آورده شده است:
در اینجا مثال دیگری از اعتبارسنجی URL دریافت شده از کاربر آورده شده است:
هنگام نمایش داده های کاربر، همیشه آن ها را رمزگذاری کنید
اگر پروژه شما دادههای کاربر را میگیرد و نمایش میدهد، مطمئن شوید که با استفاده از الگوی فرار خودکار جنگو ، {% autoescape %}
دادهها را به درستی رمزگذاری کردهاید. تگ autoescape
برای تحلیل روشن یا خاموش بودن 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 را به صورت زیر پیاده سازی کنید:
اقدامات امنیتی در برابر جعل درخواست بین سایتی (CSRF)
جعل درخواست های بین سایتی (CSRF) آسیب پذیری است که با فریب دادن کاربران به انجام اقداماتی بر خلاف دانش یا رضایت آنها حمله می کند. این حملات از یک درخواست برای فریب کاربر برای ارسال یک پیوند یا فرم در یک وب سایت یا برنامه وب دیگر استفاده می کنند و از آنجایی که درخواست از جلسه تأیید شده کاربر می آید، به پایان می رسد و مهاجم به انجام دستکاری داده ها یا انجام آن دسترسی دارد. هرگونه اقدام غیرمجاز
برای جلوگیری از چنین حملاتی در پروژه جنگو خود، می توانید این اقدامات را اجرا کنید:
از محدودیت نرخ مبتنی بر Middleware استفاده کنید
Rate-limiting برای کنترل فرکانس درخواست های ارائه شده توسط سرور، API یا کاربر استفاده می شود. این کار با داشتن محدودیت در تعداد درخواست هایی که می تواند در یک بازه زمانی معین انجام شود کار می کند.
در پروژه جنگو، ایجاد یا پیاده سازی یک میان افزار سفارشی برای ردیابی و محدود کردن درخواست کاربر بر اساس آدرس IP کاربر، تمرین خوبی است. اگر نمی توانید یک میان افزار سفارشی ایجاد کنید، می توانید از بسته محدود کننده django-rate استفاده کنید.
CSRF Middleware را فعال کنید
میانافزار Cross-Site Request Forgery (CSRF) در جنگو یک ابزار امنیتی داخلی است که با اعتبارسنجی توکن CRSF هنگام درخواستها، مانند زمانی که کاربر میخواهد وارد شود، در برابر حملات CSRF محافظت میکند.
این ایده خوبی است که میان افزار CRSF جنگو را در settings.py خود فعال کنید.
همیشه از توکن های CRSF استفاده کنید
توکنهای جعل درخواست متقاطع (CSRF) دادههای تصادفی هستند که توسط سرور شما تولید میشوند و به عنوان فیلدهای مخفی در فرمهای HTML شما اضافه میشوند یا به درخواستهای AJAX اضافه میشوند.
توکنهای CRSF با میانافزار CRSF کار میکنند، شما نمیتوانید از یکی بدون دیگری استفاده کنید. هنگام استفاده از نشانههای CRSF، جنگو بهطور خودکار با استفاده از تگ الگو {% crsf token %}
توکنها را برای شما مدیریت میکند.
چک فهرست امنیتی جنگو داخلی
بسیاری از توسعه دهندگان این را نمی دانند، اما جنگو یک چک فهرست امنیتی داخلی دارد تا اطمینان حاصل کند که پروژه ای کاملاً ایمن شده را اجرا می کنید.
این دستوری است که settings.py شما را اسکن می کند و تحلیل می کند که آیا دستورالعمل های امنیتی جنگو را پاس می کنید یا آسیب پذیری هایی دارید که هکرها می توانند از آنها سوء استفاده کنند. دستور python manage.py check --deploy
هنگامی که دستور را اجرا می کنید، باید همه اخطارها را ببینید و ممکن است برخی از خطاهای پروژه (در صورت وجود خطا) را مشاهده کنید، چیزی شبیه به این:
سایر اقدامات امنیتی
علاوه بر رویههای امنیتی که آسیبپذیریهای وب خاص را هدف قرار میدهند، پیادهسازی روشهای جزئی نیز میتواند قدرت امنیتی کلی برنامه شما را افزایش دهد.
روشی را برای نظارت مستمر برنامه جنگو مستقر شده خود برای شناسایی و پاسخگویی به حوادث امنیتی یا آسیب پذیری در زمان واقعی پیاده سازی کنید.
چارچوب جنگو، وابستگی ها و کتابخانه های شخص ثالث خود را هر 2 تا 4 ماه یکبار به روز کنید تا پروژه شما به روز باشد و از آخرین وصله های امنیتی استفاده کند و بدون اشکال باشد.
همچنین میتوانید گزارشگیری را برای نظارت و ثبت تغییرات یا فعالیتهای مرتبط با امنیت که در پروژههایتان اتفاق میافتد، پیادهسازی کنید. همچنین می تواند حوادث امنیتی احتمالی را مورد توجه قرار دهد.
نتیجه
در نتیجه، ایمن سازی یک برنامه جنگو نیاز به توجه بسیار و یک استراتژی چند لایه دارد. این شامل اجرای احراز هویت ایمن، اعتبارسنجی ورودی کاربر، اطمینان از ارتباط سرتاسر رمزگذاری شده (اعم از مشتری به سرور یا کاربر به کاربر) و اعمال معیارهای محدودکننده نرخ است.
ارسال نظر