RON dokumentace

Bezpečnost

Zabezpečení serveru pomocí HTTPS

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:

Nastavení session cookie

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");

Hlavička Strict-Transport-Security

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

Konfigurace HTTP hlaviček

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í!

X-Content-Type-Options

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");

X-Frame-Options

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");

Permissions-Policy

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)");

Content-Security-Policy

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");

Referrer-Policy

Informuje browser, kdy má posílat hlavičku referrer. V _appdbset.php lze nastavit např. takto:

    header("Referrer-Policy: no-referrer");

Blokování účtu

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