Security fixes n.a.v. pentest op noorlander.info

- CSRF token toegevoegd aan admin login formulier
- Directory listing uitgeschakeld (Options -Indexes)
- Secure/SameSite=Strict cookie verbeterd in AdminAuth
- app.js.backup en source maps verwijderd
- Version disclosure configureerbaar via config.json
- .map en backup extensies geblokkeerd in .htaccess
This commit is contained in:
2026-07-14 14:25:04 +02:00
parent 4d2e11e419
commit c6c2fdb67b
11 changed files with 46 additions and 767 deletions
+10 -2
View File
@@ -39,12 +39,15 @@ class AdminAuth
{
if (session_status() === PHP_SESSION_NONE) {
$timeout = $this->adminConfig['security']['session_timeout'] ?? 1800;
$isHttps = !empty($_SERVER['HTTPS'])
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
|| (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on');
session_set_cookie_params([
'lifetime' => $timeout,
'path' => '/',
'secure' => isset($_SERVER['HTTPS']),
'secure' => $isHttps,
'httponly' => true,
'samesite' => 'Lax'
'samesite' => 'Strict'
]);
session_start();
}
@@ -139,6 +142,11 @@ class AdminAuth
return isset($_SESSION['admin_csrf_token']) && hash_equals($_SESSION['admin_csrf_token'], $token);
}
public function regenerateCsrfToken(): void
{
$_SESSION['admin_csrf_token'] = bin2hex(random_bytes(32));
}
// --- User Management ---
public function getUsers(): array
+1
View File
@@ -27,6 +27,7 @@
</div>
<?php endif; ?>
<form method="POST" action="admin.php?route=login">
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
<div class="mb-3">
<label for="username" class="form-label">Gebruikersnaam</label>
<div class="input-group">