Hesla
- Algoritmus: bcrypt přes
password_hash($pw, PASSWORD_DEFAULT). - Verifikace:
password_verify. - Žádný plain text hesel není nikde uložen ani logován.
- Změna hesla automaticky regeneruje session cookie.
Sessions
- PHP sessions s file-based storage (default).
- Cookie:
HttpOnly,Secure(v produkci),SameSite=Lax. - Session ID se rotuje při loginu (
session_regenerate_id(true)). - Tracking přes
user_devices(SHA-256 cookie hash).
CSRF
src/Core/Security/CSRF.php generuje session-bound tokeny. Použité v:
- Web formulářích (hidden field)
- Mutating API endpointech (header
X-CSRF-Tokennebo body field)
API z kontextu prohlížeče (frontend portálu) nutně CSRF používá. Externí klienti, kteří se autentizují přes API key (zatím neimplementováno), by ho potřebovat nemuseli.
Input sanitizace
src/Core/Security/InputSanitizer.php má funkce:
| Funkce | Co dělá |
|---|---|
username($s) | lowercase, only [a-z0-9._-], length check |
email($s) | RFC 5322 lite (filter_var) |
url($s) | https-only, no userinfo, no fragments mimo whitelist |
json($s) | decode + max depth check |
text($s, $max) | trim, length check, žádné kontrolní znaky |
slug($s) | lowercase, dashes |
SQL Injection
Všechny dotazy přes PDO prepared statements. Žádný string concatenation. PDO emulation prepares je vypnutá:XSS
- Output v PHP šablonách přes
htmlspecialchars($value, ENT_QUOTES, 'UTF-8')(helpere()). - API odpovědi jsou JSON, takže XSS není vstupní vektor (ale klient musí escapovat sám).
- Kontent zápisů se ukládá jako JSON struktura, vykresluje jako odstavce — žádný raw HTML.
Rate limiting
Rate limiting — default 30 / 60s. Citlivé endpointy (login, register) mají přísnější.CSRF + path traversal pro anthem_gate.php
- Vyžaduje aktivní session.
- Path validuje:
realpath()musí začínat nauploads/user/. ..v cestě → 403.- Symlinky odmítá.
OAuth state
OAuth flow používá session-based ověření, plus do budoucna explicitstate parametr s HMAC. Ochrana proti CSRF na OAuth callback URL.
Cron secret
cron.php přijme jen requesty s parametrem ?key=<cron_secret>. Klíč je 32-znakový random, uložen v app.json. Při úniku okamžitě rotujte.
Headers (doporučená produkce)
V.htaccess:
Audit log
Klíčové akce (login, character.kill, faction.create, whitelist.review) se zapisují douser_activities. Slouží jak pro forenzní analýzu, tak pro user-facing aktivit feed.
Bezpečnostní reporting
Pokud najdete zranitelnost, neoznamujte ji veřejně. Kontakt:[email protected] nebo Discord admin (DM). Pokus o exfiltraci dat = ban + případné právní kroky.