ל-Django יש תכונות אבטחה מצוינות אבל חשוב שתבינו אותן, ומה הן עושות, כדי שהאפליקציות שלכם יהיו מאובטחות באמת.
Django מספק בסיס מאובטח לבניית יישומי אינטרנט. אבל ההסתמכות על תכונות האבטחה המוגדרות כברירת מחדל של Django אינה מספיקה. חשוב לך ליישם אמצעים נוספים לחיזוק האבטחה של היישומים שלך.
על ידי הטמעת אמצעים נוספים, אתה יכול לצמצם פגיעויות פוטנציאליות, להגן על נתונים רגישים ולהגן על האפליקציה שלך מפני איומי סייבר. זה מבטיח את ההגנה על המידע של המשתמשים שלך ועוזר לשמור על המוניטין והאמינות של הארגון שלך.
אבטחת נוף עם דקורטורים
תצוגות ב-Django מטפלות בבקשות נכנסות. הם ממלאים תפקיד חיוני בקביעת התגובה שהלקוח מקבל. אבטחת תצוגות שולטת בגישה ומגינה על פונקציות רגישות. Django מציע מעצבים שתוכלו להחיל על תצוגות כדי לאכוף אמצעי אבטחה ספציפיים.
@login_required דקורטור
ה @login_required decorator מבטיח שרק משתמשים מאומתים יכולים לגשת לתצוגה מסוימת. כאשר משתמש לא מאומת מנסה לגשת לתצוגה, האפליקציה מפנה אותו לדף הכניסה.
מ django.contrib.auth.decorators יְבוּא login_required
מ django.http יְבוּא HttpResponse
@login_required
defsecure_view(בַּקָשָׁה):
# היגיון התצוגה שלך כאן
לַחֲזוֹר HttpResponse("זוהי נוף מאובטח")
החלת ה @login_required decorator לפונקציה secure_view מבטיח אוטומטית שהמשתמש מאומת לפני ביצוע ההיגיון של התצוגה.
מעצבים בהתאמה אישית
Django מאפשר לך ליצור עיצובים מותאמים אישית. זה מאפשר לך ליישם בדיקות או הגבלות אבטחה נוספות. לדוגמה, ייתכן שתרצה ליצור מעצב המגביל את הגישה לתפקידי משתמש ספציפיים.
מ functools יְבוּא עוטפת
מ django.http יְבוּא HttpResponsedefאדמין_בלבד(view_func):
@wraps (view_func)
defעֲטִיפָה(בקשה, *args, **kwargs):
אם request.user.is_superuser:
לַחֲזוֹר view_func (בקשה, *args, **kwargs)
אַחֵר:
לַחֲזוֹר HttpResponse("גישה נדחתה")
לַחֲזוֹר עֲטִיפָה
ה אדמין_בלבד decorator בודק אם המשתמש הניגש לתצוגה הוא משתמש-על. אם כן, פונקציית התצוגה פועלת, אחרת היא מונעת מהמשתמש גישה.
אימות משתמש והרשאה
אימות משתמש והרשאה הם מרכיבים קריטיים באבטחת יישומי Django. הם מבטיחים שהאדם הנכון ניגש לפונקציות ספציפיות של האפליקציה.
אימות משתמש
אימות משתמש מאמת את זהות האדם הניגש לאפליקציה שלך. מערכת האימות של Django מספקת פונקציונליות לטיפול בכך.
מ django.contrib.auth יְבוּא אימות, כניסה
מ django.http יְבוּא HttpResponsedeflogin_view(בַּקָשָׁה):
אם request.method == 'הודעה':
שם משתמש = בקשה. הודעה['שם משתמש']
סיסמה = בקשה. הודעה['סיסמה']
משתמש = אימות (בקשה, שם משתמש=שם משתמש, סיסמה=סיסמה)
אם מִשׁתַמֵשׁ הואלֹאאף אחד:
כניסה (בקשה, משתמש)
לַחֲזוֹר HttpResponse("התחברת בהצלחה")
אַחֵר:
לַחֲזוֹר HttpResponse("אישורים לא חוקיים")
אַחֵר:
# עיבוד טופס התחברות
לַחֲזוֹר HttpResponse("טופס התחברות")
ה login_view הפונקציה מטפלת בתהליך הכניסה. כאשר משתמש שולח את האישורים שלו, פונקציית האימות מאמתת אותם. אם האישורים תקפים, פונקציית הכניסה יוצרת הפעלה עבור המשתמש, ומאפשרת לו לגשת לאזורים מוגבלים באפליקציה. אם האישורים שגויים, הקוד לא יוצר הפעלה.
הרשאת משתמש
הרשאת משתמש קובעת אילו פעולות משתמש יכול לבצע בתוך האפליקציה. Django מספקת מערכת הרשאות גמישה שנותנת לך שליטה על גישת המשתמש.
מ django.contrib.auth.decorators יְבוּא permission_required
מ django.http יְבוּא HttpResponse
@permission_required('polls.can_vote')
defהַצבָּעָה(בַּקָשָׁה):
# היגיון הצבעה כאן
לַחֲזוֹר HttpResponse("ההצבעה הוקלטה")
בדוגמה לעיל, ה @permission_required decorator מבטיח שרק משתמשים עם polls.can_vote הרשאה יכולה לגשת לתצוגת ההצבעה. אם משתמש ללא ההרשאה הנדרשת מנסה לגשת לתצוגה, נמנעת גישה.
הטמעת תוכנת ביניים מותאמת אישית
התוכנה יושבת בין שרת האינטרנט לתצוגה. הטמעת תוכנת ביניים מותאמת אישית מוסיפה בדיקות אבטחה נוספות או משנה בקשות ותגובות. זה יכול להיות מסיבות כמו אכיפת HTTPS.
מ django.http יְבוּא HttpResponsePermanentRedirect
מעמדEnforceHttpsMiddleware:
def__init__(עצמי, קבל_תגובה):
self.get_response = get_responsedef__שִׂיחָה__(עצמי, בקשה):
אםלֹא request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
לַחֲזוֹר HttpResponsePermanentRedirect (Secure_url)
לַחֲזוֹר self.get_response (בקשה)
תוכנת האמצע לעיל בודקת אם הבקשה משתמשת ב- הוא_מאבטח שיטה. אם לא, הוא מפנה ל- גרסת HTTPS של כתובת האתר.
אבטחת טיפול בקבצים
טיפול בקבצים הוא תכונה נפוצה ביישומי אינטרנט. הוא מהווה סיכוני אבטחה אם אינו מאובטח כראוי. בעת טיפול בקבצים שהועלו על ידי משתמשים, חשוב לאמת את תוכן הקובץ. זה מונע העלאות זדוניות. אתה יכול לאמת את סוגי הקבצים באמצעות FileExtensionValidator של Django.
מ django.core.validators יְבוּא FileExtension Validator
מ django.forms יְבוּא טפסים
מעמדFileUploadForm(טפסים. טופס):
קובץ = טפסים. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
בגוש הקוד לעיל, ה- FileUploadForm הכיתה משתמשת ב- FileExtension Validator לאפשר העלאת קבצי PDF ו-DOCX בלבד. האפליקציה תדחה כל פורמט קובץ אחר במהלך ההעלאה. התאם אישית את ההרחבות המותרות בהתאם לדרישות האפליקציה שלך.
הגנת CSRF
אתה יכול למנוע התקפות Cross-Site Request Forgery (CSRF) באמצעות הגנת ה-CSRF המובנית של Django. עליך לכלול בתבנית שלך א אסימון CSRF זה יאמת בצד השרת.
כאשר אתה משתמש ב % csrf_token % תג תבנית, Django יוצר שדה קלט נסתר עם אסימון CSRF. אסימון זה ייחודי לכל הפעלה של משתמש. זה עוזר לאמת את האותנטיות של הטופס שנשלח.
צד השרת בודק את אסימון ה-CSRF בעת עיבוד הגשת הטופס. אם האסימון חסר או לא חוקי, Django מעלה שגיאה אסורה (HTTP 403). חיוני להבטיח שהאפליקציה שלך בטוחה מפני פגיעות אבטחה מסוג זה.
כתיבת טפסים מאובטחים
בעת יצירת טפסים, חשוב לטפל בקלט משתמש בצורה מאובטחת. זה נועד למנוע פגיעויות נפוצות כמו הזרקת SQL והתקפות XSS. להלן דוגמה שמראה כיצד ניתן ליצור טופס מאובטח ב-Django.
מ ג'נגו יְבוּא טפסים
מ django.utils.html יְבוּא בריחהמעמדSecureForm(טפסים. טופס):
שם = צורות. CharField (max_length=100)
מייל = טפסים. EmailField()defשם_נקי(עצמי):
name = self.cleaned_data['שֵׁם']# חיטוי קלט המשתמש
sanitized_name = escape (שם)
לַחֲזוֹר Sanized_namedefclean_email(עצמי):
email = self.cleaned_data['אימייל']# אמת וחיטוי קלט משתמש
אםלֹא email.endswith('@example.com'):
הַעֲלָאָה טפסים. שגיאת אימות("דומיין לא חוקי")
sanitized_email = escape (אימייל)
לַחֲזוֹר sanitized_email
ה שם_נקי ו clean_email שיטות מאמתות ומחטאות את קלט המשתמש. ה שם_נקי השיטה משתמשת ב- בריחה פונקציה לחטא את קלט השם ולמנוע התקפות XSS פוטנציאליות.
ה clean_email השיטה מאמתת את פורמט הדוא"ל ומגבילה את דומיין הדוא"ל ל example.com. זה מעלה א שגיאת אימות אם האימייל אינו עומד בקריטריונים שצוינו. פעולה זו משפרת את האבטחה של הטפסים שלך ומגינה עליהם מפני פגיעויות נפוצות.
הבנת פגיעויות יישומי אינטרנט היא חשובה
הבנת נקודות התורפה של יישומי אינטרנט תעזור לך לאבטח את היישום שלך. זה יעשה זאת על ידי כך שיעזור לך לזהות ולטפל בנקודות תורפה פוטנציאליות באפליקציה. זה בתורו יפחית משמעותית את הסבירות להתקפות מוצלחות.