Django има отлични функции за сигурност, но е жизненоважно да ги разбирате и какво правят, за да бъдат вашите приложения наистина сигурни.

Django осигурява сигурна основа за изграждане на уеб приложения. Но разчитането на функциите за сигурност на Django по подразбиране не е достатъчно. За вас е от решаващо значение да приложите допълнителни мерки за укрепване на сигурността на вашите приложения.

Чрез внедряване на допълнителни мерки можете да смекчите потенциалните уязвимости, да защитите чувствителните данни и да защитите приложението си от кибер заплахи. Това гарантира защитата на информацията на вашите потребители и спомага за поддържането на репутацията и надеждността на вашата организация.

Осигуряване на изгледи с декоратори

Изгледите в Django обработват входящи заявки. Те играят жизненоважна роля при определяне на отговора, който клиентът получава. Осигуряването на изгледи контролира достъпа и защитава чувствителните функции. Django предлага декоратори, които можете да приложите към изгледи, за да наложите конкретни мерки за сигурност.

instagram viewer

@login_required Декоратор

The @login_required декораторът гарантира, че само удостоверени потребители имат достъп до определен изглед. Когато неупълномощен потребител се опита да получи достъп до изгледа, приложението го пренасочва към страницата за вход.

от django.contrib.auth.decorators импортиране login_required
от django.http импортиране HttpResponse

@login_required
дефзащитен_изглед(заявка):
# Вашата логика на изгледа тук
връщане HttpResponse(„Това е защитен изглед“)

Прилагане на @login_required декоратор към функцията secure_view автоматично гарантира, че потребителят е удостоверен, преди да изпълни логиката на изгледа.

Персонализирани декоратори

Django ви позволява да създавате персонализирани декоратори. Това ви позволява да приложите допълнителни проверки за сигурност или ограничения. Например, може да искате да създадете декоратор, който ограничава достъпа до конкретни потребителски роли.

от functools импортиране обвивки
от django.http импортиране HttpResponse

дефadmin_only(view_func):
@wraps (view_func)
дефобвивка(заявка, *args, **kwargs):
ако request.user.is_superuser:
връщане view_func (заявка, *args, **kwargs)
друго:
връщане HttpResponse("Отказан достъп")

връщане обвивка

The admin_only декораторът проверява дали потребителят, който има достъп до изгледа, е суперпотребител. Ако са, функцията за преглед се изпълнява, в противен случай тя отказва достъп на потребителя.

Удостоверяване и оторизация на потребителя

Удостоверяването и оторизацията на потребителя са критични компоненти за защита на приложенията на Django. Те гарантират, че правилният човек има достъп до специфични функции на приложението.

Удостоверяване на потребителя

Удостоверяването на потребителя потвърждава самоличността на лицето, което има достъп до вашето приложение. Системата за удостоверяване на Django предоставя функционалност за справяне с това.

от django.contrib.auth импортиране удостоверяване, влизане
от django.http импортиране HttpResponse

дефlogin_view(заявка):
ако request.method == „ПУБЛИКУВАНЕ“:
потребителско име = заявка. ПУБЛИКУВАНЕ['потребителско име']
парола = заявка. ПУБЛИКУВАНЕ["парола"]
потребител = удостоверяване (заявка, потребителско име=потребителско име, парола=парола)

ако потребител енеНито един:
вход (заявка, потребител)
връщане HttpResponse("Успешен вход")
друго:
връщане HttpResponse("Невалидни идентификационни данни")
друго:
# Рендиране на формуляр за влизане
връщане HttpResponse("Форма за влизане")

The login_view функция управлява процеса на влизане. Когато потребител изпрати своите идентификационни данни, функцията за удостоверяване ги проверява. Ако идентификационните данни са валидни, функцията за влизане създава сесия за потребителя, което му позволява достъп до ограничени области на приложението. Ако идентификационните данни са грешни, кодът не създава сесия.

Упълномощаване на потребителя

Упълномощаването на потребителя определя какви действия може да извършва потребителят в приложението. Django предоставя гъвкава система за разрешения, която ви дава контрол върху потребителския достъп.

от django.contrib.auth.decorators импортиране permission_required
от django.http импортиране HttpResponse

@permission_required('polls.can_vote')
дефгласуване(заявка):
# Логика на гласуване тук
връщане HttpResponse(„Гласуването е записано“)

В горния пример, @permission_required декораторът гарантира, че само потребители с polls.can_vote разрешение може да има достъп до изгледа за гласуване. Ако потребител без необходимото разрешение се опита да получи достъп до изгледа, достъпът му се отказва.

Внедряване на персонализиран междинен софтуер

Мидълуерът се намира между уеб сървъра и изгледа. Внедряването на персонализиран междинен софтуер добавя допълнителни проверки за сигурност или променя заявки и отговори. Това може да се дължи на причини като налагане на HTTPS.

от django.http импортиране HttpResponsePermanentRedirect

класEnforceHttpsMiddleware:
деф__в него__(self, get_response):
self.get_response = get_response

деф__обадете се__(самостоятелно, заявка):
аконе 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 версия на URL адреса.

Сигурна обработка на файлове

Работата с файлове е често срещана функция в уеб приложенията. Това създава рискове за сигурността, ако не е правилно защитено. Когато работите с файлове, качени от потребители, е важно да проверите съдържанието на файла. Това предотвратява злонамерени качвания. Можете да валидирате типовете файлове с помощта на FileExtensionValidator на Django.

от django.core.validators импортиране FileExtensionValidator
от django.forms импортиране форми

класFileUploadForm(форми. форма):
файл = форми. FileField (validators=[FileExtensionValidator (allowed_extensions=["pdf", 'docx'])])

В горния кодов блок, FileUploadForm класът използва FileExtensionValidator за да разрешите само качване на PDF и DOCX файлове. Приложението ще отхвърли всички други файлови формати по време на качване. Персонализирайте разрешените разширения според изискванията на вашето приложение.

CSRF защита

Можете да предотвратите атаки с фалшифициране на заявки между сайтове (CSRF), като използвате вградената CSRF защита на Django. Трябва да включите във вашия шаблон a CSRF токен който ще се валидира от страната на сървъра.

"пост" действие="/Подай формуляр/">
{% csrf_token %}
Полета на формуляри


Когато използвате % csrf_token % шаблонен етикет, Django генерира скрито поле за въвеждане с CSRF токена. Този токен е уникален за всяка потребителска сесия. Той помага да се потвърди автентичността на изпратения формуляр.

Страната на сървъра проверява CSRF токена, когато обработва подаването на формуляра. Ако токенът липсва или е невалиден, Django повдига грешка Забранено (HTTP 403). От съществено значение е да се гарантира, че вашето приложение е защитено от този тип уязвимост на сигурността.

Писане на защитени форми

Когато създавате формуляри, е важно да обработвате безопасно въвеждането от потребителя. Това е за предотвратяване на често срещани уязвимости като SQL инжектиране и XSS атаки. По-долу е даден пример, който показва как можете да създадете защитен формуляр в Django.

от Джанго импортиране форми
от django.utils.html импортиране бягство

класSecureForm(форми. форма):
име = форми. CharField (max_length=100)
имейл = формуляри. EmailField()

дефчисто_име(себе си):
име = self.cleaned_data[име]

# Дезинфекцирайте въведеното от потребителя
sanitized_name = бягство (име)
връщане санирано_име

дефчист_имейл(себе си):
имейл = self.cleaned_data['електронна поща']

# Валидирайте и дезинфекцирайте въведеното от потребителя
аконе email.endswith(„@example.com“):
повишавам форми. ValidationError(„Невалиден имейл домейн“)

sanitized_email = бягство (имейл)
връщане sanitized_email

The чисто_име и чист_имейл методи валидират и дезинфекцират въведеното от потребителя. The чисто_име методът използва бягство функция за дезинфекция на въвеждането на име и предотвратяване потенциални XSS атаки.

The чист_имейл метод валидира имейл формата и ограничава имейл домейна до example.com. Повдига a ValidationError ако имейлът не отговаря на посочените критерии. Това действие повишава сигурността на вашите формуляри и ги предпазва от често срещани уязвимости.

Разбирането на уязвимостите на уеб приложенията е важно

Разбирането на уязвимостите на уеб приложенията ще ви помогне да защитите приложението си. Това ще стане, като ви помогне да идентифицирате и адресирате потенциални слаби места в приложението. Това от своя страна значително ще намали вероятността от успешни атаки.