| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php
- /**
- * Script de test pour la sécurisation des sessions et CSRF
- *
- * Ce script permet de vérifier que toutes les fonctionnalités de sécurité
- * sont correctement implémentées.
- *
- * ⚠️ À SUPPRIMER EN PRODUCTION
- */
- require_once "../env.inc.php";
- // Test 1 : Démarrage de session sécurisée
- echo "=== TEST 1 : Démarrage session sécurisée ===\n";
- try {
- $started = secureSession::start();
- echo $started ? "✅ Session démarrée avec succès\n" : "❌ Échec démarrage session\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 2 : Informations de sécurité de la session
- echo "\n=== TEST 2 : Informations de sécurité ===\n";
- try {
- $info = secureSession::getSecurityInfo();
- echo "✅ Session ID : " . substr($info['session_id'], 0, 10) . "...\n";
- echo "✅ Session Name : " . $info['session_name'] . "\n";
- echo "✅ HTTPS : " . ($info['is_https'] ? 'Oui' : 'Non') . "\n";
- echo "✅ HttpOnly : " . ($info['cookie_params']['httponly'] ? 'Oui' : 'Non') . "\n";
- echo "✅ Secure : " . ($info['cookie_params']['secure'] ? 'Oui' : 'Non') . "\n";
- echo "✅ SameSite : " . $info['cookie_params']['samesite'] . "\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 3 : Génération de tokens CSRF
- echo "\n=== TEST 3 : Génération tokens CSRF ===\n";
- try {
- $token1 = csrf::generateToken('test-form-1');
- $token2 = csrf::generateToken('test-form-2');
- echo "✅ Token 1 généré : " . substr($token1, 0, 16) . "...\n";
- echo "✅ Token 2 généré : " . substr($token2, 0, 16) . "...\n";
- echo ($token1 !== $token2) ? "✅ Les tokens sont différents\n" : "❌ Les tokens sont identiques (problème)\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 4 : Validation de token CSRF
- echo "\n=== TEST 4 : Validation token CSRF ===\n";
- try {
- $testToken = csrf::generateToken('validation-test');
- $isValid = csrf::validateToken($testToken, 'validation-test');
- echo $isValid ? "✅ Validation token réussie\n" : "❌ Validation token échouée\n";
- // Le token devrait être supprimé après validation
- $isValidAgain = csrf::validateToken($testToken, 'validation-test');
- echo !$isValidAgain ? "✅ Token correctement supprimé après validation\n" : "❌ Token pas supprimé (problème)\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 5 : Génération HTML pour formulaires
- echo "\n=== TEST 5 : Génération HTML ===\n";
- try {
- $inputField = csrf::inputField('html-test');
- echo "✅ Input field généré : " . htmlspecialchars($inputField) . "\n";
- $metaTag = csrf::metaTag('ajax-test');
- echo "✅ Meta tag généré : " . htmlspecialchars($metaTag) . "\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 6 : Statistiques CSRF
- echo "\n=== TEST 6 : Statistiques CSRF ===\n";
- try {
- // Générer quelques tokens
- csrf::generateToken('form-a');
- csrf::generateToken('form-b');
- csrf::generateToken('form-c');
- $stats = csrf::getStats();
- echo "✅ Nombre de tokens actifs : " . $stats['count'] . "\n";
- foreach ($stats['forms'] as $formName => $info) {
- echo " - $formName : âge = {$info['age']}s, créé le {$info['created_at']}\n";
- }
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 7 : Nettoyage des tokens expirés
- echo "\n=== TEST 7 : Nettoyage tokens expirés ===\n";
- try {
- // Tous les tokens ont été créés il y a moins d'1 seconde
- $removed = csrf::cleanExpiredTokens(1); // Expiration après 1 seconde
- sleep(2); // Attendre 2 secondes
- $removed = csrf::cleanExpiredTokens(1);
- echo "✅ Tokens expirés supprimés : $removed\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 8 : Régénération ID de session
- echo "\n=== TEST 8 : Régénération ID de session ===\n";
- try {
- $oldId = session_id();
- $regenerated = secureSession::regenerateId();
- $newId = session_id();
- echo $regenerated ? "✅ Régénération réussie\n" : "❌ Échec régénération\n";
- echo ($oldId !== $newId) ? "✅ L'ID a bien changé\n" : "❌ L'ID n'a pas changé (problème)\n";
- echo " Ancien : " . substr($oldId, 0, 10) . "...\n";
- echo " Nouveau : " . substr($newId, 0, 10) . "...\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 9 : Timeout d'inactivité
- echo "\n=== TEST 9 : Timeout d'inactivité ===\n";
- try {
- $isValid = secureSession::setInactivityTimeout(30); // 30 minutes
- echo $isValid ? "✅ Timeout configuré (30 minutes)\n" : "❌ Échec configuration timeout\n";
- // Vérifier via la méthode session
- $checkTimeout = session::checkTimeout(30);
- echo $checkTimeout ? "✅ Session active (dans le timeout)\n" : "❌ Session expirée\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Test 10 : Variables de session
- echo "\n=== TEST 10 : Variables de session ===\n";
- try {
- echo "Variables de sécurité présentes :\n";
- echo isset($_SESSION['_session_created']) ? "✅ _session_created\n" : "❌ _session_created manquante\n";
- echo isset($_SESSION['_session_ip']) ? "✅ _session_ip : {$_SESSION['_session_ip']}\n" : "❌ _session_ip manquante\n";
- echo isset($_SESSION['_session_user_agent']) ? "✅ _session_user_agent\n" : "❌ _session_user_agent manquante\n";
- echo isset($_SESSION['_session_last_activity']) ? "✅ _session_last_activity\n" : "❌ _session_last_activity manquante\n";
- } catch (Exception $e) {
- echo "❌ Erreur : " . $e->getMessage() . "\n";
- }
- // Résumé final
- echo "\n" . str_repeat("=", 50) . "\n";
- echo "✅ Tests terminés avec succès !\n";
- echo "Les fonctionnalités de sécurité sont opérationnelles.\n";
- echo str_repeat("=", 50) . "\n";
- echo "\n⚠️ N'OUBLIEZ PAS DE SUPPRIMER CE FICHIER EN PRODUCTION !\n";
|