Pytigon dziedziczy sprawdzony w boju model bezpieczeństwa Django i rozszerza go o ochronę specyficzną dla aplikacji. Bezpieczeństwo nie jest myślą dodaną na koniec — jest wbudowane w warstwę modeli, warstwę widoków i potok renderowania szablonów.
Pytigon wspiera wiele backendów autentykacji:
Skonfiguruj backendy autentykacji w settings_app.py:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
Standardowy system uprawnień Django (add, change, delete, view) jest rozszerzony o własne uprawnienia definiowane per aplikacja:
class Album(JSONModel):
class Meta:
permissions = [
("export_album", "Can export albums"),
("approve_album", "Can approve albums"),
]
Modele mogą implementować filter_by_permissions(), by ograniczyć które rekordy użytkownik może zobaczyć:
@staticmethod
def filter_by_permissions(queryset_or_obj, request):
if not request.user.is_superuser:
return queryset_or_obj.filter(department=request.user.department)
return queryset_or_obj
Pozycje menu są automatycznie ukrywane przed użytkownikami pozbawionymi wymaganych uprawnień. Można definiować własne funkcje uprawnień dla złożonych reguł dostępu:
Perms: x|schadmin.applib.perms.if_filer
Middleware CSRF Django jest aktywny domyślnie. Handlery AJAX Pytigona automatycznie dołączają token CSRF:
// Automatycznie dołączane do wszystkich żądań AJAX
headers: {
'X-CSRFToken': ptig.csrf_token
}
Pytigon używa wyłącznie ORM Django do dostępu do bazy. Parametryzacja zapytań przez ORM zapobiega atakom SQL injection. Dynamiczne filtry przekazywane przez URLe są walidowane i sanityzowane przed zastosowaniem do QuerySetów.
|safeUploadowane pliki są: - przechowywane poza rootem WWW (niedostępne bezpośrednio przez URL) - skanowane pod kątem typu zawartości (walidacja MIME) - ograniczone rozmiarem (skonfigurowane w ustawieniach) - serwowane przez kontrolowany widok pobierania (z kontrolą uprawnień)
Zalecane produkcyjne nagłówki bezpieczeństwa:
SECURE_HSTS_SECONDS = 31536000
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'