Zabezpečení PHP instalace
Co se vyplatí zabezpečit na instalaci serveru Apache, PHP a MySQL. A pokud jste začínajícím programátorem v PHP, s čím je dobré počítat při tvorbě svých skriptů. Ne vše Vám může fungovat po přesunu z vývojového prostředí na produkční server.
Zakázat otvírání adres přes funkce manipulující se soubory
Funkce fopen, file_get_contents a include mohou umožňovat otvírání vzdáleného URL podobně jako když čtete lokální soubor. Spolu s možností ovlivnit uživatelem jméno souboru zde existuje velmi silné riziko, jak aplikaci podvrhnout nebezpečná data.
V nastavení serveru stačí přidat do souboru php.ini následující řádek:
allow_url_fopen = Off
Ke vzdáleným adresám je pak nadále možné přistupovat přes fsockopen nebo funkce CURL.
Vypnout Register Globals
Ačkoliv se již toto nastavení dočkalo změny od verze 4.2.0 je možné, že někde ještě zůstává z důvodu nekompatibilních a špatně napsaných aplikací. Pokud můžete takové projekty přepište nebo zrušte. V některých případech je manipulace s libovolnou proměnnou velmi nebezpečná a při psaní kódu to hlavně začátečníci mohou lehce přehlédnout.
V nastavení stačí ověřit přítomnost řádku:
register_globals = Off
Omezit čtení a zápis PHP samotnému
Velmi často stačí skriptům přístup pouze pro některý adresář a jeho podadresáře. Všechny funkce přistupující k souborům lze omezit například na /var/www/htdocs/files následující řádkou:
open_basedir = /var/www/htdocs/files
Safe mode
Bezpečný mód omezuje přístup k souborům, u kterých není vlastníkem Apache. Omezuje přístup k proměnným prostředí a spouštění binárních programů.
safe_mode = Off safe_mode_gid = On
Safe_mode_gid umožní přístup i k souborům, které jsou ve vlastnictví jiných uživatelů. Nicméně musí mít nastaveny na apache aspoň skupinu.
Povolení některých binárek je možné umístěním do jednoho adresáře (např. /var/www/binaries) a povolením v konfiguraci:
safe_mode_exec_dir = /var/www/binaries
Přístup k některým proměnným prostředí je možné povolit, pokud mají stejný prefix (např. PHP_).
safe_mode_allowed_env_vars = PHP_
Nastavit limity
max_execution_time = 30 ; Max doba běhu skriptu max_input_time = 60 ; Max doba parsování vstupu memory_limit = 16M ; Max paměti použité jedním skriptem upload_max_filesize = 2M ; Max velikost uploadovaného souboru post_max_size = 8M ; Max velikost požadavku POST
Omezit přístup k určitým souborům
Mnoho souborů by nemělo být přístupných i když se v projektu budou vyskytovat. Typicky velmi populární přípona .inc (mnohem vhodnější je používat .inc.php) bude na většině nezabezpečených serverů vést k zobrazení zdrojového kódu a bude volně přístupná. Podobně na tom jsou záložní kopie editovaných souborů .php~ nebo .sql. Obrana je zase jednoduchá do souboru .htaccess nebo konfigurace apache stačí přidat:
<FilesMatch "\.(inc|.*sql|.*~)$"> Order allow,deny Deny from all
Chybové zprávy a logy
Ve výchozím nastavení jde výstup chyb do okna prohlížeče. To je vhodné během vývoje, nicméně pro ostrý běh je lepší zprávy nezobrazovat a směrovat je do logu:
display_errors = Off log_errors = On
Skrýt přítomnost PHP
PHP o sobě dává vědět několika různými cestami. Informace objevíte v hlavičce HTTP požadavků a navíc obsahuje i Easter Egg ve formě vráceného obrázku v případě zavolání následující adresy:
http://www.example.com/script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Nicméně není důvod, proč by o PHP na serveru měl některý z návštěvníků vědět. Jednoduše to lze zařídit nastavením v php.ini:
expose_php = Off
Závěrem
Výchozí konfigurace distribuovaná s PHP je vhodná spíš pro vývoj aplikací, ale ne pro produkční servery. Pokud server sami provozujete, tak si ověřte zmiňovaná nastavení. V opačném případě se nedivte, že některá nastavení mohou být na ostrém serveru odlišná a někdy mohou způsobit i nefunkčnost Vašich aplikací.
Ayman Hourieh's Blog - Checklist for Securing PHP Configuration
Tip: Krátké zprávy a zajímavosti (rychlý přístup https://kryl.info/kratce)
Související
- Google Code Search pro hackery (10. 10. 2006 16:38)
- Tvorba sebeobranných webových aplikací (01. 08. 2005 08:09)
- Google Penetration Testing (01. 08. 2005 07:08)
- 5 kroků k zachování bezpečnosti (04. 04. 2005 23:51)
- TOP 10 chyb webových aplikací (07. 02. 2005 06:07)
- PHP 5 podrobně (21. 07. 2004 06:00)
- PHP optimalizace 3 (30. 05. 2004 23:36)
- PHP optimalizace 2 (28. 05. 2004 00:02)
- PHP optimalizace (24. 05. 2004 00:15)