# 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>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/pentest-web/autre/django.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
