Messages d'erreur
Messages d'erreur verbeux (DEBUG = true dans settings.py + vérifier existance d'un template de message d'erreur générique).
DEBUG = true
settings.py
Authentification
Vérifier qu'il existe des protections contre le brute force d'identifiants.
Vérifier que seul les utilisateurs connectés peuvent accéder à des vues.
Vérifier l'existance d'une politique de mots de passe. (AUTH_PASSWORD_VALIDATORS dans settings.py)
AUTH_PASSWORD_VALIDATORS
Vérifier que les mots de passe sont hashés avant d'être stockés
Gestion des secrets
Vérifier que la SECRET_KEY du fichier settings.py n'est pas exposé en clair
SECRET_KEY
Vérifier que la clé comprend au moins 50 caractères dont majuscules, minuscules, chiffres et caractères spéciaux.
Vérifier que la clé est générée avec un générateur fiable. (ex: get_random_secret_key())
get_random_secret_key()
En-têtes
Vérifier que l'application intégre correctement les en-têtes de sécurité
Cookies
Vérifier que les cookies de sessions et CSRF sont transmis de manière sécurisée dans le fichier settings.py.
SESSION_COOKIE_SECURE = true
CSRF_COOKIE_SECURE = true
De la même manière, vérifier que si des cookies personnalisés sont crées, ils le sont avec l'attribut secure=True.
secure=True
CSRF
Vérifier que des tokens CSRF sont utilisés pour chaque formulaire.
XSS
Vérifier que la fonction django.utils.html.escape() est utilisée pour sécuriser les entrées utilisateur.
django.utils.html.escape()
Vérifier l'absence d'utilisation des fonctions safe, mark_safe, ou json_script sur des entrées utilisateur.
safe
mark_safe
json_script
SQLi
Vérifier que les requêtes SQL sont paramétrées.
Journalisation et surveillance
Vérifier que les actions importantes sont journalisées et qu'aucune donnée sensibles ou personnelle ne l'est.
Défense en profondeur
Vérifier que le chemin par défaut du panneau d'administration a été changé.
Vérifier que les hôtes autorisés à accéder au panneau d'administration ont bien été renseignés (ALLOWED_HOSTS dans settings.py)
ALLOWED_HOSTS
Mis à jour il y a 2 ans