تتمتع Django بميزات أمان ممتازة ، لكن من الضروري أن تفهمها ، وماذا تفعل ، حتى تكون تطبيقاتك آمنة حقًا.

يوفر Django أساسًا آمنًا لبناء تطبيقات الويب. لكن الاعتماد على ميزات الأمان الافتراضية لـ Django لا يكفي. من الأهمية بمكان تنفيذ تدابير إضافية لتعزيز أمان تطبيقاتك.

من خلال تنفيذ تدابير إضافية ، يمكنك التخفيف من نقاط الضعف المحتملة وحماية البيانات الحساسة وحماية تطبيقك من التهديدات الإلكترونية. يضمن ذلك حماية معلومات المستخدمين ويساعد في الحفاظ على سمعة مؤسستك ومصداقيتها.

تأمين المناظر مع الديكور

المشاهدات في Django تعالج الطلبات الواردة. يلعبون دورًا حيويًا في تحديد الاستجابة التي يحصل عليها العميل. تتحكم طرق العرض الآمنة في الوصول وتحمي الوظائف الحساسة. تقدم Django زخارف يمكنك تطبيقها على المناظر لفرض إجراءات أمنية محددة.

تضمين التغريدة

ال @تسجيل الدخول مطلوب يضمن مصمم الديكور أن المستخدمين المعتمدين فقط هم من يمكنهم الوصول إلى عرض معين. عندما يحاول مستخدم غير مصادق الوصول إلى العرض ، يعيد التطبيق توجيهه إلى صفحة تسجيل الدخول.

من django.contrib.auth.decorators يستورد تسجيل الدخول مطلوب
من django.http يستورد HttpResponse
instagram viewer

@تسجيل الدخول مطلوب
defطريقة العرض الآمنة(طلب):
# منطق العرض الخاص بك هنا
يعود استجابة Http ("هذه طريقة عرض آمنة")

تطبيق @تسجيل الدخول مطلوب يضمن مصمم الديكور لوظيفة secure_view تلقائيًا مصادقة المستخدم قبل تنفيذ منطق العرض.

مصممون مخصصون

يسمح لك Django بإنشاء ديكورات مخصصة. هذا يسمح لك بتنفيذ فحوصات أو قيود أمنية إضافية. على سبيل المثال ، قد ترغب في إنشاء مصمم ديكور يقيد الوصول إلى أدوار مستخدم محددة.

من functools يستورد يلف
من django.http يستورد HttpResponse

defadmin_only(view_func):
wraps (view_func)
defغلاف(request، * args، ** kwargs):
لو request.user.is_superuser:
يعود view_func (request، * args، ** kwargs)
آخر:
يعود استجابة Http ("تم الرفض")

يعود غلاف

ال admin_only يتحقق مصمم الديكور ما إذا كان المستخدم الذي يصل إلى العرض مستخدمًا متميزًا. إذا كانت كذلك ، يتم تشغيل وظيفة العرض ، وإلا فإنها تمنع وصول المستخدم.

مصادقة المستخدم والترخيص

مصادقة المستخدم والترخيص من المكونات الأساسية لتأمين تطبيقات Django. يضمنون وصول الشخص المناسب إلى وظائف محددة للتطبيق.

مصادقة المستخدم

تتحقق مصادقة المستخدم من هوية الشخص الذي يصل إلى التطبيق الخاص بك. يوفر نظام المصادقة الخاص بـ Django وظائف للتعامل مع هذا الأمر.

من django.contrib.auth يستورد المصادقة ، تسجيل الدخول
من django.http يستورد HttpResponse

defتسجيل الدخول(طلب):
لو طريقة الطلب == 'بريد':
اسم المستخدم = طلب. بريد['اسم المستخدم']
كلمة المرور = طلب. بريد['كلمة المرور']
المستخدم = المصادقة (الطلب ، اسم المستخدم = اسم المستخدم ، كلمة المرور = كلمة المرور)

لو مستخدم يكونلالا أحد:
تسجيل الدخول (طلب ، مستخدم)
يعود استجابة Http ("تسجيل الدخول ناجح")
آخر:
يعود استجابة Http ("بيانات الاعتماد غير صالحة")
آخر:
# تقديم نموذج تسجيل الدخول
يعود استجابة Http ("نموذج تسجيل الدخول")

ال تسجيل الدخول وظيفة تتعامل مع عملية تسجيل الدخول. عندما يرسل المستخدم بيانات اعتماده ، تتحقق وظيفة المصادقة منها. إذا كانت بيانات الاعتماد صالحة ، تقوم وظيفة تسجيل الدخول بإنشاء جلسة للمستخدم ، مما يسمح له بالوصول إلى المناطق المحظورة في التطبيق. إذا كانت بيانات الاعتماد خاطئة ، فلن يُنشئ الرمز جلسة.

ترخيص المستخدم

يحدد ترخيص المستخدم الإجراءات التي يمكن للمستخدم تنفيذها داخل التطبيق. يوفر Django نظام أذونات مرنًا يمنحك التحكم في وصول المستخدم.

من django.contrib.auth.decorators يستورد إذن_المطلوب
من django.http يستورد HttpResponse

permission_required ('polls.can_vote')
defتصويت(طلب):
# منطق التصويت هنا
يعود استجابة Http ("التصويت مسجل")

في المثال أعلاه ، فإن ملف تضمين التغريدة يضمن مصمم الديكور أن المستخدمين الذين لديهم فقط الاستطلاعات. can_vote يمكن إذن الوصول إلى عرض التصويت. إذا حاول مستخدم بدون الإذن اللازم الوصول إلى العرض ، فسيتم رفض وصوله.

تنفيذ البرامج الوسيطة المخصصة

توجد البرامج الوسيطة بين خادم الويب والعرض. يضيف تنفيذ البرامج الوسيطة المخصصة فحوصات أمنية إضافية أو يعدل الطلبات والاستجابات. يمكن أن يكون هذا لأسباب مثل فرض HTTPS.

من django.http يستورد HttpResponsePermanentRedirect

فصلEnforceHttpsMiddleware:
def__فيه__(self، get_response):
self.get_response = get_response

def__يتصل__(ذاتي ، طلب):
لولا request.is_secure ():
url = request.build_absolute_uri (request.get_full_path ())
secure_url = url.replace (' http://', ' https://')
يعود HttpResponsePermanentRedirect (secure_url)

يعود self.get_response (طلب)

تتحقق البرامج الوسيطة أعلاه مما إذا كان الطلب يستخدم الامتداد is_secure طريقة. إذا لم يكن كذلك ، فإنه يعيد التوجيه إلى ملف نسخة HTTPS من URL.

تأمين معالجة الملفات

تعتبر معالجة الملفات ميزة شائعة في تطبيقات الويب. إنها تشكل مخاطر أمنية إذا لم يتم تأمينها بشكل صحيح. عند التعامل مع الملفات التي تم تحميلها بواسطة المستخدم ، من المهم التحقق من صحة محتويات الملف. هذا يمنع التحميلات الضارة. يمكنك التحقق من أنواع الملفات باستخدام Django FileExtensionValidator.

من django.core.validators يستورد FileExtensionValidator
من django.forms يستورد نماذج

فصلFileUploadForm(نماذج. استمارة):
ملف = أشكال. FileField (المدققون = [FileExtensionValidator (allowed_extensions = ['بي دي إف', "docx"])])

في كتلة التعليمات البرمجية أعلاه ، فإن ملف FileUploadForm يستخدم الفصل FileExtensionValidator للسماح فقط بتحميل ملفات PDF و DOCX. سيرفض التطبيق أي تنسيقات ملفات أخرى أثناء التحميل. قم بتخصيص الامتدادات المسموح بها وفقًا لمتطلبات التطبيق الخاص بك.

حماية CSRF

يمكنك منع هجمات Cross-Site Request Forgery (CSRF) باستخدام حماية CSRF المدمجة من Django. يجب أن تدرج في النموذج الخاص بك أ رمز CSRF التي من شأنها التحقق من صحة على جانب الخادم.

"بريد" عمل ="/تقديم النموذج/">
{٪ csrf_token٪}
حقول النموذج


عند استخدام ملف ٪ csrf_token٪ علامة القالب ، يقوم Django بإنشاء حقل إدخال مخفي برمز CSRF. هذا الرمز مميز لكل جلسة مستخدم. يساعد في التحقق من صحة النموذج المقدم.

يتحقق جانب الخادم من رمز CSRF عند معالجة إرسال النموذج. إذا كان الرمز المميز مفقودًا أو غير صالح ، فإن Django يثير خطأ محظور (HTTP 403). من الضروري التأكد من أن التطبيق الخاص بك في مأمن من هذا النوع من الثغرات الأمنية.

كتابة نماذج آمنة

عند إنشاء النماذج ، من المهم التعامل مع مدخلات المستخدم بأمان. هذا لمنع الثغرات الأمنية الشائعة مثل حقن SQL وهجمات XSS. يوجد أدناه مثال يوضح كيف يمكنك إنشاء نموذج آمن في Django.

من دجانغو يستورد نماذج
من django.utils.html يستورد يهرب

فصلSecureForm(نماذج. استمارة):
الاسم = النماذج. CharField (أقصى طول =100)
البريد الإلكتروني = النماذج. حقل البريد الإلكتروني ()

defclean_name(الذات):
الاسم = self.cleaned_data ['اسم']

# تعقيم مدخلات المستخدم
sanitized_name = escape (name)
يعود sanitized_name

defclean_email(الذات):
البريد الإلكتروني = self.cleaned_data ['بريد إلكتروني']

# التحقق من صحة مدخلات المستخدم وتعقيمها
لولا email.endswith ("@ example.com"):
يرفع نماذج. خطئ في التحقق("مجال بريد إلكتروني غير صالح")

sanitized_email = هروب (بريد إلكتروني)
يعود sanitized_email

ال clean_name و clean_email طرق التحقق من صحة إدخال المستخدم وتعقيمه. ال clean_name يستخدم الأسلوب يهرب وظيفة لتعقيم إدخال الاسم ومنعه هجمات XSS المحتملة.

ال clean_email تقوم الطريقة بالتحقق من صحة تنسيق البريد الإلكتروني وتقييد مجال البريد الإلكتروني إلى example.com. يثير أ خطئ في التحقق إذا كان البريد الإلكتروني لا يلبي المعايير المحددة. يعمل هذا الإجراء على تحسين أمان النماذج وحمايتها من الثغرات الأمنية الشائعة.

من المهم فهم ثغرات تطبيق الويب

سيساعدك فهم نقاط الضعف في تطبيقات الويب على تأمين تطبيقك. سيفعل ذلك من خلال مساعدتك في تحديد ومعالجة نقاط الضعف المحتملة في التطبيق. سيؤدي هذا بدوره إلى تقليل احتمالية نجاح الهجمات بشكل كبير.