# Django

## Checklist

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).

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`)
* [ ] 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
* [ ] 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()`)

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`.

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.
* [ ] Vérifier l'absence d'utilisation des fonctions `safe`, `mark_safe`, ou `json_script` sur des entrées utilisateur.

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`)

## Ressources

{% embed url="<https://docs.djangoproject.com/en/3.2/topics/security/>" %}

{% embed url="<https://cheatsheetseries.owasp.org/cheatsheets/Django_Security_Cheat_Sheet.html>" %}

{% embed url="<https://blog.s1rn3tz.ovh/pentest-web/analyse-statique/python>" %}
