// - Au début des handlers POST : csrf_check(); function csrf_token() { if (empty($_SESSION['_csrf_token'])) { $_SESSION['_csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['_csrf_token']; } function csrf_field() { return ''; } function csrf_check($strict = false) { if ($_SERVER['REQUEST_METHOD'] !== 'POST') return true; $token = $_POST['_csrf'] ?? $_SERVER['HTTP_X_CSRF_TOKEN'] ?? ''; $valid = !empty($_SESSION['_csrf_token']) && is_string($token) && hash_equals($_SESSION['_csrf_token'], $token); if (!$valid) { // Mode soft : on log, on ne bloque pas (à activer en strict plus tard) error_log('CSRF token mismatch on ' . ($_SERVER['REQUEST_URI'] ?? '?') . ' from ' . ($_SERVER['REMOTE_ADDR'] ?? '?')); if ($strict) { http_response_code(403); exit('CSRF token invalide'); } } return $valid; }
| Date d'autorisation (PC) ou de non-opposition (DP) initiale : | 17/05/2021 |
| Date d'ouverture de chantier : | 01/01/1970 |
| Date réelle d'achèvement des travaux : | |
| Année de dépôt de la demande : | 2021 |