Clean URLs and security improvements

- Add .htaccess rewrite rules for clean URLs (/nl/page, /admin/route)
- Add PHP dev server router with clean URL support
- Update admin template asset paths to absolute for clean URL compat
- All pentest fixes verified: CSRF on login, directory listing disabled,
  secure cookies, backup/sourcemap files removed, version disclosure off
This commit is contained in:
2026-07-14 15:28:53 +02:00
parent 98f74b2861
commit c244514a48
24 changed files with 233 additions and 205 deletions
+24 -24
View File
@@ -4,8 +4,8 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CodePress Admin</title>
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/bootstrap-icons.css">
<link rel="stylesheet" href="/assets/css/bootstrap.min.css">
<link rel="stylesheet" href="/assets/css/bootstrap-icons.css">
<style>
body { background-color: #f5f6fa; min-height: 100vh; }
.admin-sidebar { background-color: #0a369d; min-height: 100vh; width: 240px; position: fixed; top: 0; left: 0; z-index: 100; }
@@ -25,8 +25,8 @@
}
</style>
<?php if (in_array($route ?? '', ['content-edit', 'content-new', 'plugins-edit'])): ?>
<link rel="stylesheet" href="assets/codemirror/codemirror.min.css">
<link rel="stylesheet" href="assets/css/editor.css">
<link rel="stylesheet" href="/assets/codemirror/codemirror.min.css">
<link rel="stylesheet" href="/assets/css/editor.css">
<?php endif; ?>
</head>
<body>
@@ -37,43 +37,43 @@
</div>
<ul class="nav flex-column mt-2">
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'dashboard' || ($route ?? '') === '' ? 'active' : '' ?>" href="admin.php?route=dashboard">
<a class="nav-link <?= ($route ?? '') === 'dashboard' || ($route ?? '') === '' ? 'active' : '' ?>" href="/admin/dashboard">
<i class="bi bi-speedometer2"></i> Dashboard
</a>
</li>
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'content' || str_starts_with($route ?? '', 'content') ? 'active' : '' ?>" href="admin.php?route=content">
<a class="nav-link <?= ($route ?? '') === 'content' || str_starts_with($route ?? '', 'content') ? 'active' : '' ?>" href="/admin/content">
<i class="bi bi-file-earmark-text"></i> Content
</a>
</li>
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'theme' ? 'active' : '' ?>" href="admin.php?route=theme">
<a class="nav-link <?= ($route ?? '') === 'theme' ? 'active' : '' ?>" href="/admin/theme">
<i class="bi bi-palette"></i> Thema
</a>
</li>
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'config' ? 'active' : '' ?>" href="admin.php?route=config">
<a class="nav-link <?= ($route ?? '') === 'config' ? 'active' : '' ?>" href="/admin/config">
<i class="bi bi-sliders"></i> Configuratie
</a>
</li>
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'plugins' ? 'active' : '' ?>" href="admin.php?route=plugins">
<a class="nav-link <?= ($route ?? '') === 'plugins' ? 'active' : '' ?>" href="/admin/plugins">
<i class="bi bi-plug"></i> Plugins
</a>
</li>
<li class="nav-item">
<a class="nav-link <?= ($route ?? '') === 'users' ? 'active' : '' ?>" href="admin.php?route=users">
<a class="nav-link <?= ($route ?? '') === 'users' ? 'active' : '' ?>" href="/admin/users">
<i class="bi bi-people"></i> Gebruikers
</a>
</li>
<li class="nav-item mt-3">
<a class="nav-link" href="index.php" target="_blank">
<a class="nav-link" href="/" target="_blank">
<i class="bi bi-box-arrow-up-right"></i> Website bekijken
</a>
</li>
<li class="nav-item">
<a class="nav-link text-warning" href="admin.php?route=logout">
<a class="nav-link text-warning" href="/admin/logout">
<i class="bi bi-box-arrow-left"></i> Uitloggen
</a>
</li>
@@ -147,19 +147,19 @@
?>
</main>
<script src="assets/js/bootstrap.bundle.min.js"></script>
<script src="/assets/js/bootstrap.bundle.min.js"></script>
<?php if (in_array($route ?? '', ['content-edit', 'content-new', 'plugins-edit'])): ?>
<script src="assets/codemirror/codemirror.min.js"></script>
<script src="assets/codemirror/mode/markdown.min.js"></script>
<script src="assets/codemirror/mode/xml.min.js"></script>
<script src="assets/codemirror/mode/htmlmixed.min.js"></script>
<script src="assets/codemirror/mode/php.min.js"></script>
<script src="assets/codemirror/mode/clike.min.js"></script>
<script src="assets/codemirror/mode/css.min.js"></script>
<script src="assets/codemirror/mode/javascript.min.js"></script>
<script src="assets/codemirror/addon/edit/closebrackets.min.js"></script>
<script src="assets/codemirror/addon/selection/active-line.min.js"></script>
<script src="assets/js/editor-toolbar.js"></script>
<script src="/assets/codemirror/codemirror.min.js"></script>
<script src="/assets/codemirror/mode/markdown.min.js"></script>
<script src="/assets/codemirror/mode/xml.min.js"></script>
<script src="/assets/codemirror/mode/htmlmixed.min.js"></script>
<script src="/assets/codemirror/mode/php.min.js"></script>
<script src="/assets/codemirror/mode/clike.min.js"></script>
<script src="/assets/codemirror/mode/css.min.js"></script>
<script src="/assets/codemirror/mode/javascript.min.js"></script>
<script src="/assets/codemirror/addon/edit/closebrackets.min.js"></script>
<script src="/assets/codemirror/addon/selection/active-line.min.js"></script>
<script src="/assets/js/editor-toolbar.js"></script>
<?php endif; ?>
</body>
</html>