First commit

This commit is contained in:
Johan
2025-12-18 14:35:15 +01:00
commit 460c962bb6
26 changed files with 796 additions and 0 deletions

43
templates/base.html Normal file
View File

@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Démo OWASP A01</title>
<style>
body { font-family: sans-serif; max-width: 800px; margin: 20px auto; padding: 15px; line-height: 1.6; background-color: #f4f4f4; }
nav { background: #333; color: white; padding: 10px; border-radius: 8px; margin-bottom: 20px; }
nav a { color: white; text-decoration: none; padding: 5px 10px; }
nav ul { list-style-type: none; padding: 0; margin: 0; display: flex; }
nav ul li { margin-right: 15px; }
.user-info { margin-left: auto; }
.container { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
h1, h2 { color: #333; }
a { color: #007bff; }
.alert-fail { border: 1px solid #d9534f; background: #f2dede; color: #a94442; padding: 10px; border-radius: 5px; }
.alert-ok { border: 1px solid #5cb85c; background: #dff0d8; color: #3c763d; padding: 10px; border-radius: 5px; }
</style>
</head>
<body>
<nav>
<ul>
<li><a href="/">Accueil</a></li>
<li><a href="/admin/">Admin</a></li>
<li class="user-info">
{% if user.is_authenticated %}
Bonjour, {{ user.username }}!
<a href="{% url 'logout' %}?next=/">Se déconnecter</a>
{% else %}
<a href="{% url 'login' %}?next=/">Se connecter</a>
{% endif %}
</li>
</ul>
</nav>
<div class="container">
{% block content %}
{% endblock %}
</div>
</body>
</html>

42
templates/home.html Normal file
View File

@@ -0,0 +1,42 @@
{% extends 'base.html' %}
{% block content %}
<h1>Démonstration OWASP A01: Broken Access Control (IDOR)</h1>
{% if user.is_authenticated %}
<p>Bienvenue, {{ user.username }}.</p>
{% if user.profile %}
<h2>Testez l'accès à votre profil</h2>
<p>Les deux liens ci-dessous pointent vers votre propre profil (ID: {{ user.profile.pk }}). Essayez ensuite de changer l'ID dans l'URL pour voir le profil de l'autre utilisateur.</p>
<div class="alert-fail">
<h3>Lien VULNÉRABLE</h3>
<p>Cette vue ne vérifie pas qui vous êtes. Elle vous laissera voir le profil d'un autre utilisateur si vous changez l'ID dans l'URL.</p>
<a href="{% url 'profiles:vulnerable_detail' pk=user.profile.pk %}">
Voir mon profil (VULNÉRABLE)
</a>
<br>
<small><code>/profile/vulnerable/{{ user.profile.pk }}/</code></small>
</div>
<br>
<div class="alert-ok">
<h3>Lien SÉCURISÉ</h3>
<p>Cette vue vérifie que vous êtes bien le propriétaire du profil. Elle bloquera (403 Forbidden) toute tentative de voir le profil d'un autre.</p>
<a href="{% url 'profiles:secure_detail' pk=user.profile.pk %}">
Voir mon profil (SÉCURISÉ)
</a>
<br>
<small><code>/profile/secure/{{ user.profile.pk }}/</code></small>
</div>
{% else %}
<p>Votre profil n'a pas encore été créé. (Cela ne devrait pas arriver, vérifiez les signaux)</p>
{% endif %}
{% else %}
<p>Veuillez vous connecter pour voir la démonstration.</p>
<a href="{% url 'login' %}?next=/">Se connecter</a>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends 'base.html' %}
{% block content %}
<h1>Profil de {{ profile.user.username }}</h1>
<p><strong>Utilisateur :</strong> {{ profile.user.username }}</p>
<p><strong>ID Profil :</strong> {{ profile.pk }}</p>
<hr>
<h2>Note Secrète</h2>
<p style="font-size: 1.2em; font-weight: bold; color: #d9534f;">
{{ profile.secret_note|default:"[Aucune note secrète définie]" }}
</p>
{% endblock %}

27
templates/protected.html Normal file
View File

@@ -0,0 +1,27 @@
{% extends 'base.html' %}
{% block content %}
<h1 style="color: #d9534f;">Zone (censée être) Protégée</h1>
<div class="alert-fail">
<h2>Accès NON-AUTORISÉ !</h2>
<p>
Vous n'auriez jamais dû trouver cette page !
</p>
<p>
Ceci est un (faux) panneau d'administration secret avec des informations sensibles.
Le fait que vous puissiez voir cette page sans être connecté
est une faille de sécurité (Security Misconfiguration / Broken Access Control).
</p>
<p>L'outil "Parcours forcés" de ZAP a probablement trouvé cette page parce que
l'URL <code>/protected/</code> était dans sa liste de mots.</p>
</div>
<h3>Informations "Sensibles"</h3>
<ul>
<li>Clé API du système : <code>fake_api_key_123456789ABCDEF</code></li>
<li>Endpoint de backup : <code>/system/run_backup_now</code></li>
<li>Mot de passe BDD (dev) : <code>admin/admin</code></li>
</ul>
{% endblock %}

View File

@@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block content %}
<h2>Se connecter</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Se connecter</button>
</form>
{% endblock %}