Files
0012/todo/12-monitor-php-token-check.md
T
Frank Schwenk 2440fbf974 fix: spam-friendly mail headers; docs: monitor.php token todo
Use MTA-style Message-ID and display names on From/To to avoid
SpamAssassin MSGID_RANDY and PDS_NAKED_TO_NUMERO. Add todo/12 for
HTTP token gate on monitor.php (CLI cron unchanged).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 10:48:37 +02:00

45 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 12 — monitor.php: Token-Check (HTTP)
**Priorität:** medium
**Abhängigkeiten:** 03 (monitor.php), 05 (Plesk-Cron)
**Referenz:** [`../public/monitor.php`](../public/monitor.php), [`../public/mail-test.php`](../public/mail-test.php)
## Problem
`monitor.php` ist per **GET** öffentlich erreichbar (`https://0012.de/monitor.php`). Im Plesk-Access-Log tauchen neben dem Cron-`curl` auch fremde Clients auf (z. B. `got` von AWS-IPs) — jeder kann Checks auslösen, JSON/Status lesen und Last erzeugen.
Plesk-Cron kann das Skript **per CLI** ausführen (`php monitor.php`) — dort ist kein HTTP nötig.
## Ziel
HTTP-Aufrufe nur mit gültigem Token; CLI/Cron unverändert.
## Checkliste
- [ ] In `monitor.php` (oder `monitor-lib.php`): bei Web-SAPI (`php_sapi_name() !== 'cli'`) Token prüfen
- Query-Parameter `token` oder Header `X-Monitor-Token`
- Secret: bestehendes `MONITOR_INGEST_TOKEN` (wie `mail-test.php`) oder separates `MONITOR_RUN_TOKEN`
- Vergleich mit `hash_equals()`
- Bei Fehler: `403` + kurzer JSON/Text, **kein** Monitoring-Lauf
- [ ] Plesk-Cron auf **PHP-Skript (CLI)** umstellen, falls aktuell URL/Curl — siehe [`05-plesk-cron.md`](05-plesk-cron.md)
- [ ] Optional: `.htaccess` / Plesk „Verzeichnis schützen“ nur als Zusatz, nicht als einzige Absicherung
- [ ] Deploy + manueller Test:
- `GET /monitor.php` ohne Token → 403
- `GET /monitor.php?token=…` → Lauf OK
- `php monitor.php` lokal/auf Server → Lauf OK
- [ ] Kurz in [`../MONITORING.md`](../MONITORING.md) oder [`05-plesk-cron.md`](05-plesk-cron.md) dokumentieren
## Nicht im Scope
- Rate-Limit / IP-Whitelist (optional später)
- Absicherung von `index.php` (öffentliche Statusseite bleibt bewusst offen)
## Akzeptanzkriterien
- Fremde GET-Requests ohne Token lösen keinen Monitor-Lauf aus
- Geplanter Plesk-Cron (CLI) läuft weiter zuverlässig
## Referenz-Implementierung
Vorbild Token-Check: [`../public/mail-test.php`](../public/mail-test.php) (Zeilen 15–22).