{% extends "xeolux_securitykit/base.html" %} {% block title %}Documentation{% endblock %} {% block content %}
Référence complète des conditions, actions, configuration et mise en place.
pip install xeolux-securitykit
"xeolux_securitykit" dans settings.py
"xeolux_securitykit.middleware.SecurityKitMiddleware" en premier dans MIDDLEWARE
path("", include("xeolux_securitykit.urls")) dans urls.py
python manage.py migrate puis python manage.py setup_securitykit
Dans Django Admin → Utilisateur → Permissions : ajouter xeolux_securitykit | Configuration SecurityKit | Peut accéder à l'interface SecurityKit
XEOLUX_SECURITYKIT = {
"ENABLED": True, # Active/désactive le package entier
"DEFAULT_RESPONSE": "fake_404", # fake_404 | 403 | ghost | json | redirect
"SELF_PROTECTION_ENABLED": True, # Protège /securitykit/ lui-même
"LOCKOUT_SAFETY_ENABLED": True, # Empêche l'admin de se verrouiller
"STRICT_MODE_ENABLED": True,
"ANTI_DDOS_ENABLED": True,
"AUTO_STRICT_THRESHOLD": 80, # Score → mode strict automatique
"AUTO_LOCKDOWN_THRESHOLD": 95, # Score → lockdown automatique
"TEMP_BAN_DURATION": 3600, # Durée bannissement (secondes)
"RATE_LIMIT_WINDOW": 60, # Fenêtre rate limit (secondes)
"RATE_LIMIT_MAX_REQUESTS": 120, # Max requêtes/IP dans la fenêtre
"EXEMPT_PATHS": ["/static/", "/media/"],
"EMAIL_SUPER_ADMINS": True, # Alertes email aux superadmins
"UNLOCK_CODE_TTL": 3600, # Durée code déverrouillage strict
}
Une route est un chemin ou pattern d'URL. Chaque route peut avoir plusieurs règles. Les règles sont évaluées par priorité décroissante. La première règle dont toutes les conditions sont remplies détermine l'action.
exactprefixregexaccess_securitykit ne sont jamais bloqués par les règles de route, quel que soit le contenu des conditions.
Les conditions sont stockées en JSON dans le champ conditions d'une règle.
Toutes les conditions doivent être vraies pour que la règle s'applique (logique ET).
Action déclenchée quand les conditions de la règle sont remplies et que l'accès doit être refusé.
Chaque IP accumule un score de menace basé sur son comportement. Le score global influence l'activation automatique du mode strict et du lockdown.
| Événement | Points |
|---|---|
| Chemin suspect (suspicious_path) | +5 |
| Accès fichier sensible (file_access) | +5 |
| User-Agent bloqué | +3 |
| Flood détecté | +15 |
| Tentative bruteforce | +10 |
Les modules sont des protections indépendantes activables/désactivables depuis Modules.
Le honeypot est un champ invisible ajouté à vos formulaires Django. Les bots qui remplissent automatiquement tous les champs déclenchent la protection et voient leur soumission silencieusement ignorée.
1. Activer le module honeypot
Dans l'interface SecurityKit, allez dans Modules et activez honeypot.
2. Ajouter le tag dans votre template
<!-- En haut du template -->
{% verbatim %}{% load securitykit_tags %}
<form method="post">
{% csrf_token %}
{% honeypot_field %} <!-- champ invisible pour les bots -->
<!-- vos champs normaux -->
{{ form.as_p }}
<button type="submit">Envoyer</button>
</form>{% endverbatim %}
3. Vérifier la soumission dans la vue
from xeolux_securitykit.modules.honeypot import check_honeypot
def my_contact_view(request):
if request.method == "POST":
# Retourne True si c'est un bot (champ honeypot rempli)
if check_honeypot(request):
return redirect("contact") # fausse réussite, silencieuse
form = ContactForm(request.POST)
if form.is_valid():
# traitement normal...
pass
4. Via le décorateur (optionnel)
from xeolux_securitykit.modules.honeypot import honeypot_protected
@honeypot_protected # bloque silencieusement les bots avant d'entrer dans la vue
def my_contact_view(request):
form = ContactForm(request.POST or None)
...
display:none + label trompeur). Un vrai visiteur humain ne le verra jamais. Un bot qui remplit tous les champs automatiquement le remplira, déclenchant la protection.
| Paramètre | Valeur active | Description |
|---|---|---|
AUTO_STRICT_THRESHOLD | {{ conf_auto_strict }} | Score menace → mode strict |
AUTO_LOCKDOWN_THRESHOLD | {{ conf_auto_lockdown }} | Score menace → lockdown automatique |
TEMP_BAN_DURATION | {{ conf_temp_ban }}s | Durée d'un bannissement temporaire |
RATE_LIMIT_WINDOW | {{ conf_rate_limit_window }}s | Fenêtre glissante rate limit |
RATE_LIMIT_MAX_REQUESTS | {{ conf_rate_limit_max }} | Max requêtes/IP par fenêtre |
# Initialise les données de test (users, routes, clés) python manage.py setup_securitykit # Active le mode strict manuellement python manage.py securitykit_strict_on --reason "Maintenance" # Désactive le mode strict python manage.py securitykit_strict_off # Vide tous les scores de menace en cache python manage.py securitykit_reset_threats # Export / import de la configuration complète python manage.py securitykit_export > config.json python manage.py securitykit_import config.json