Doporučujeme provozovat webserver na protokolu HTTPS. V tom případě je vhodné provést také další nastavení PHP a případně doplnit bezpečnostní hlavičky:
session.cookie_secure = 1
Zajistí, že se session cookie nebude odesílat na nezabezpečeném připojení, takže ji nepůjde "ukradnout" odposloucháváním síťové komunikace. Pokud nemáte možnost změnit nastavení PHP, tak je možné ji nastavit i v _appdbset.php příkazem
ini_set("session.cookie_secure", "1");
session.cookie_httponly = 1
Zajistí, že nelze číst session cookie pomocí javascriptu. V _appdbset.php lze nastavit příkazem
ini_set("session.cookie_httponly", "1");
U session je vhodné v php.ini nastavit také atribut samesite:
session.cookie_samesite = "Strict"
Případně v _appdbset.php
ini_set("session.cookie_samesite", "Strict");
Pokud server běží jen na https a zobrazení přes HTTP není žádoucí, je možné nastavit také hlavičku Strict-Transport-Security.
Zajistí, že browser bude vždy (po zadaný počet sekund od posledního přístupu) automaticky přistupovat na web pomocí HTTPS (i když uživatel zadá adresu s HTTP).
S touto hlavičkou OPATRNĚ! Je potřeba vědět co děláte! Pro odzkoušení je vhodné nejdříve nastavit nějakou malou hodnotu (např. 60)
header("Strict-Transport-Security: max-age=60");
a teprve po otestování nastavit větší hodnotu, např.
Strict-Transport-Security: max-age=31536000; includeSubDomains
POZOR! Pokud se nastaví tato hlavička, tak už musí být web trvale dostupný přes HTTPS. Po případném vypnutí HTTPS by se tam prohlížeč přes HTTP nedostal.
Viz. popis zde: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
Na IIS serveru se zapíná v Nastavení SSL - Konfigurovat HSTS
V odpovědi serveru není vhodné zobrazovat verzi použitého webserveru. Server IIS standardně tuto hlavičku generuje. Vypnutí je možné například tímto postupem:
https://support.waters.com/KB_Inf/Other/WKB202501_How_to_disable_the_Server_HTTP_header_in_Microsoft_IIS
V odpovědi serveru není vhodné zobrazovat verzi použitého PHP. K tomu služí v php.ini volba
expose_php = Off
Další možnost je nastavit hlavičku v nastavení webového serveru (na IIS je v sekci HTTP hlavičky odpovědí)
Odtranění hlavičky pomocí příkazu header_remove("X-Powered-By");
není dostatečné, protože jakýkoliv PHP soubor, který tento příkaz nespustí, verzi zobrazí!
Zabrání zpracování javascriptu nebo css pro obsah, který nemá nastaven správný mime typ. V _appdbset.php lze nastavit např. takto:
header("X-Content-Type-Options: nosniff");
Zabrání vložení stránky do jiné (externí) stránky jako frame. Pokud stránku ve frame používáte, tak je potřeba hodnotu vhodně upravit.
Doporučená hodnota: X-Frame-Options: SAMEORIGIN
Případně lze vkládání do frame úplně zakázat: X-Frame-Options: DENY
v _appdbset.php lze nastavit např. takto:
header("X-Frame-Options: SAMEORIGIN");
Umožňuje nastavit přístup k některým rozhraním prohlížeče. V _appdbset.php lze nastavit např. takto:
header("Permissions-Policy: geolocation=(self)");
Umožňuje nastavit dodatečné zabezpečení obsahu stránky. Tato hlavička by neměla být nastavena přímo na serveru, protože některé její parametry je potřeba nastavovat náhodně! V _appdbset.php lze nastavit např. takto:
// Hlavička CSP má spoustu různých nastavení. Lze použít například toto:
header("Content-Security-Policy: Content-Security-Policy default-src 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content; X-XSS-Protection 1; mode=block");
Informuje browser, kdy má posílat hlavičku referrer. V _appdbset.php lze nastavit např. takto:
header("Referrer-Policy: no-referrer");
Při zadání špatného hesla se účet dočasně zablokuje. Při prvním zadání hesla se zablokuje na sekundu a následně se interval prodlužuje vždy na dvojnásobek, takže při druhém je to 2 sekundy, pak 4, 8 atd. Maximální doba blokování účtu lze nastavit v _appdbset:
$maxaccountblocktime = 600; // maximalni doba blokovani uctu po zadani spatneho hesla - default je 600