Ajout mode présentation
This commit is contained in:
1 parent
4862d61ccd
commit
08875d3b5a
18 files changed
+1781
-270
No files matched your search
+149
-126
@@ -4,6 +4,9 @@ require_once(__DIR__ . '/functions/security.php');
|
||||
// Ajout des logs Discord (chemin via __DIR__ car captcha.php est à la racine du site)
|
||||
require_once(__DIR__ . '/functions/sendLogs.php');
|
||||
|
||||
// Versionnement des fichiers statiques (casse le cache navigateur à chaque modif du CSS)
|
||||
require_once(__DIR__ . '/functions/assets.php');
|
||||
|
||||
// Recharger une nouvelle série si demandé
|
||||
if (isset($_GET['reload']) && $_GET['reload'] === '1') {
|
||||
unset($_SESSION['captcha_round']);
|
||||
@@ -408,153 +411,173 @@ $attemptsLeft = $round['attempts_left'] ?? 0;
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
|
||||
<link rel="stylesheet" href="./styles/captcha.css">
|
||||
<link rel="stylesheet" href="<?php echo htmlspecialchars(urlAsset('styles/captcha.css', './')); ?>">
|
||||
</head>
|
||||
<body class="<?php echo $success ? 'success-mode' : ''; ?>">
|
||||
<main class="captcha-shell">
|
||||
<?php if ($success): ?>
|
||||
<section class="success-screen">
|
||||
<div class="success-burst"></div>
|
||||
<div class="success-icon">✅</div>
|
||||
<h1>Vérification réussie</h1>
|
||||
<p>Bravo, tu as repéré le(s) mail(s) frauduleux. Redirection en cours...</p>
|
||||
<?php
|
||||
// Deux écrans possibles : la réussite (avec redirection automatique), ou le test lui-même.
|
||||
if ($success) {
|
||||
|
||||
<?php if (!empty($foundReasons)): ?>
|
||||
<div class="success-reasons">
|
||||
<p class="success-reasons-title">Ce que tu as repéré :</p>
|
||||
<ul>
|
||||
<?php foreach ($foundReasons as $reason): ?>
|
||||
<li><i class="reason-dot"></i><?php echo htmlspecialchars($reason, ENT_QUOTES, 'UTF-8'); ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
// --- Écran de réussite ---
|
||||
echo <<<'HTML'
|
||||
<section class="success-screen">
|
||||
<div class="success-burst"></div>
|
||||
<div class="success-icon">✅</div>
|
||||
<h1>Vérification réussie</h1>
|
||||
<p>Bravo, tu as repéré le(s) mail(s) frauduleux. Redirection en cours...</p>
|
||||
HTML;
|
||||
|
||||
<div class="success-loader">
|
||||
<span></span>
|
||||
</div>
|
||||
</section>
|
||||
// Rappel de ce que le visiteur a correctement identifié, s'il y a quelque chose à dire
|
||||
if (!empty($foundReasons)) {
|
||||
echo '<div class="success-reasons">';
|
||||
echo '<p class="success-reasons-title">Ce que tu as repéré :</p>';
|
||||
echo '<ul>';
|
||||
|
||||
<script>
|
||||
setTimeout(function () {
|
||||
window.location.href = './index.php';
|
||||
}, 2400);
|
||||
</script>
|
||||
<?php else: ?>
|
||||
<form class="captcha-card" method="post" action="">
|
||||
<div class="captcha-badge">🛡️ Test anti-robot</div>
|
||||
foreach ($foundReasons as $reason) {
|
||||
echo '<li><i class="reason-dot"></i>' . htmlspecialchars($reason, ENT_QUOTES, 'UTF-8') . '</li>';
|
||||
}
|
||||
|
||||
<div class="captcha-top">
|
||||
<div>
|
||||
<h1 class="captcha-title">Vérification humaine</h1>
|
||||
<p class="captcha-subtitle">
|
||||
Sélectionne <strong>tous les emails qui te semblent frauduleux</strong> parmi les messages
|
||||
ci-dessous. Certains sont plus dangereux que d'autres.
|
||||
</p>
|
||||
</div>
|
||||
echo '</ul>';
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
<div class="captcha-target">
|
||||
<span>Vérification demandée</span>
|
||||
<strong>Repérer le phishing</strong>
|
||||
</div>
|
||||
</div>
|
||||
echo <<<'HTML'
|
||||
<div class="success-loader">
|
||||
<span></span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="captcha-stats">
|
||||
<div class="captcha-attempts">
|
||||
<span>Essais restants</span>
|
||||
<strong><?php echo htmlspecialchars((string) $attemptsLeft, ENT_QUOTES, 'UTF-8'); ?> / <?php echo htmlspecialchars((string) $maxAttempts, ENT_QUOTES, 'UTF-8'); ?></strong>
|
||||
<div class="attempts-dots">
|
||||
<?php for ($i = 0; $i < $maxAttempts; $i++): ?>
|
||||
<span class="<?php echo $i < $attemptsLeft ? 'dot-filled' : 'dot-empty'; ?>"></span>
|
||||
<?php endfor; ?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(function () {
|
||||
window.location.href = './index.php';
|
||||
}, 2400);
|
||||
</script>
|
||||
HTML;
|
||||
|
||||
<?php if ($locked): ?>
|
||||
<a class="captcha-reset" href="./captcha.php?reload=1">Recharger une nouvelle série</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
} else {
|
||||
|
||||
<?php if ($error !== ''): ?>
|
||||
<div class="captcha-error"><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></div>
|
||||
<?php endif; ?>
|
||||
// --- Écran du test ---
|
||||
echo <<<'HTML'
|
||||
<form class="captcha-card" method="post" action="">
|
||||
<div class="captcha-badge">🛡️ Test anti-robot</div>
|
||||
|
||||
<div class="mailbox">
|
||||
<div class="mailbox-toolbar">
|
||||
<div class="mailbox-dots">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="mailbox-label">Test anti-robot : cochez les mails qui ressemblent à une arnaque</div>
|
||||
</div>
|
||||
<div class="captcha-top">
|
||||
<div>
|
||||
<h1 class="captcha-title">Vérification humaine</h1>
|
||||
<p class="captcha-subtitle">
|
||||
Sélectionne <strong>tous les emails qui te semblent frauduleux</strong> parmi les messages
|
||||
ci-dessous. Certains sont plus dangereux que d'autres.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mail-list">
|
||||
<?php foreach ($round['emails'] as $index => $mail): ?>
|
||||
<label class="mail-option <?php echo $locked ? 'mail-option-disabled' : ''; ?>" style="--mail-index: <?php echo (int) $index; ?>">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="selected_mails[]"
|
||||
value="<?php echo htmlspecialchars($mail['id'], ENT_QUOTES, 'UTF-8'); ?>"
|
||||
<?php echo $locked ? 'disabled' : ''; ?>
|
||||
>
|
||||
<span class="mail-row">
|
||||
<span class="mail-check"><i class="fa-solid fa-check"></i></span>
|
||||
<div class="captcha-target">
|
||||
<span>Vérification demandée</span>
|
||||
<strong>Repérer le phishing</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="mail-avatar">
|
||||
<?php echo htmlspecialchars(firstLetterSafe($mail['sender']), ENT_QUOTES, 'UTF-8'); ?>
|
||||
</span>
|
||||
<div class="captcha-stats">
|
||||
<div class="captcha-attempts">
|
||||
<span>Essais restants</span>
|
||||
HTML;
|
||||
|
||||
<span class="mail-sender">
|
||||
<?php echo htmlspecialchars($mail['sender'], ENT_QUOTES, 'UTF-8'); ?>
|
||||
</span>
|
||||
// Compteur d'essais restants
|
||||
echo '<strong>' . htmlspecialchars((string) $attemptsLeft, ENT_QUOTES, 'UTF-8')
|
||||
. ' / ' . htmlspecialchars((string) $maxAttempts, ENT_QUOTES, 'UTF-8') . '</strong>';
|
||||
|
||||
<span class="mail-content">
|
||||
<span class="mail-subject">
|
||||
<?php echo htmlspecialchars($mail['subject'], ENT_QUOTES, 'UTF-8'); ?>
|
||||
</span>
|
||||
<span class="mail-preview">
|
||||
<?php echo htmlspecialchars($mail['preview'], ENT_QUOTES, 'UTF-8'); ?>
|
||||
</span>
|
||||
</span>
|
||||
// Une pastille par essai : pleine tant qu'il reste des essais, vide ensuite
|
||||
echo '<div class="attempts-dots">';
|
||||
|
||||
<span class="mail-time">
|
||||
<?php echo htmlspecialchars($mail['time'], ENT_QUOTES, 'UTF-8'); ?>
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
for ($i = 0; $i < $maxAttempts; $i++) {
|
||||
echo '<span class="' . ($i < $attemptsLeft ? 'dot-filled' : 'dot-empty') . '"></span>';
|
||||
}
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="captcha_token"
|
||||
value="<?php echo htmlspecialchars($round['token'], ENT_QUOTES, 'UTF-8'); ?>"
|
||||
>
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
|
||||
<!-- Champ piège (honeypot) : invisible et exclu du tabulateur pour un humain,
|
||||
mais souvent rempli automatiquement par les robots qui remplissent tout -->
|
||||
<div class="captcha-honeypot" aria-hidden="true">
|
||||
<label for="website">Laisse ce champ vide</label>
|
||||
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
// Plus d'essais disponibles : on propose une nouvelle série de mails
|
||||
if ($locked) {
|
||||
echo '<a class="captcha-reset" href="./captcha.php?reload=1">Recharger une nouvelle série</a>';
|
||||
}
|
||||
|
||||
<div class="captcha-footer">
|
||||
<p class="captcha-note">
|
||||
Tu as plusieurs essais. Les faux mails utilisent souvent l’urgence, les cadeaux improbables, les menaces ou les demandes de mot de passe.
|
||||
</p>
|
||||
echo '</div>';
|
||||
|
||||
<div class="captcha-actions">
|
||||
<?php if ($locked): ?>
|
||||
<a class="captcha-secondary-button" href="./captcha.php?reload=1">Nouvelle série</a>
|
||||
<?php else: ?>
|
||||
<button type="submit" class="captcha-submit">Valider ma sélection</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
// Message d'erreur du dernier essai raté
|
||||
if ($error !== '') {
|
||||
echo '<div class="captcha-error">' . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . '</div>';
|
||||
}
|
||||
|
||||
echo <<<'HTML'
|
||||
<div class="mailbox">
|
||||
<div class="mailbox-toolbar">
|
||||
<div class="mailbox-dots">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="mailbox-label">Test anti-robot : cochez les mails qui ressemblent à une arnaque</div>
|
||||
</div>
|
||||
|
||||
<div class="mail-list">
|
||||
HTML;
|
||||
|
||||
// Un bloc "mail" cliquable par message de la série tirée au sort
|
||||
foreach ($round['emails'] as $index => $mail) {
|
||||
$desactive = $locked ? 'disabled' : '';
|
||||
$classeOption = $locked ? 'mail-option mail-option-disabled' : 'mail-option ';
|
||||
|
||||
echo '<label class="' . $classeOption . '" style="--mail-index: ' . (int) $index . '">';
|
||||
echo '<input type="checkbox" name="selected_mails[]" value="'
|
||||
. htmlspecialchars($mail['id'], ENT_QUOTES, 'UTF-8') . '" ' . $desactive . '>';
|
||||
echo '<span class="mail-row">';
|
||||
echo '<span class="mail-check"><i class="fa-solid fa-check"></i></span>';
|
||||
echo '<span class="mail-avatar">' . htmlspecialchars(firstLetterSafe($mail['sender']), ENT_QUOTES, 'UTF-8') . '</span>';
|
||||
echo '<span class="mail-sender">' . htmlspecialchars($mail['sender'], ENT_QUOTES, 'UTF-8') . '</span>';
|
||||
echo '<span class="mail-content">';
|
||||
echo '<span class="mail-subject">' . htmlspecialchars($mail['subject'], ENT_QUOTES, 'UTF-8') . '</span>';
|
||||
echo '<span class="mail-preview">' . htmlspecialchars($mail['preview'], ENT_QUOTES, 'UTF-8') . '</span>';
|
||||
echo '</span>';
|
||||
echo '<span class="mail-time">' . htmlspecialchars($mail['time'], ENT_QUOTES, 'UTF-8') . '</span>';
|
||||
echo '</span>';
|
||||
echo '</label>';
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
|
||||
// Jeton de la série en cours : permet de vérifier les réponses côté serveur
|
||||
echo '<input type="hidden" name="captcha_token" value="'
|
||||
. htmlspecialchars($round['token'], ENT_QUOTES, 'UTF-8') . '">';
|
||||
|
||||
// Champ piège (honeypot) : invisible et exclu du tabulateur pour un humain,
|
||||
// mais souvent rempli automatiquement par les robots qui remplissent tout
|
||||
echo <<<'HTML'
|
||||
<div class="captcha-honeypot" aria-hidden="true">
|
||||
<label for="website">Laisse ce champ vide</label>
|
||||
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="captcha-footer">
|
||||
<p class="captcha-note">
|
||||
Tu as plusieurs essais. Les faux mails utilisent souvent l’urgence, les cadeaux improbables, les menaces ou les demandes de mot de passe.
|
||||
</p>
|
||||
|
||||
<div class="captcha-actions">
|
||||
HTML;
|
||||
|
||||
// Bouton de validation, remplacé par un lien de relance quand les essais sont épuisés
|
||||
if ($locked) {
|
||||
echo '<a class="captcha-secondary-button" href="./captcha.php?reload=1">Nouvelle série</a>';
|
||||
} else {
|
||||
echo '<button type="submit" class="captcha-submit">Valider ma sélection</button>';
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user