Je zřejmé, že PHP + MySQL + Apache je populární komponenty webové technology. Jsou silné, všestranné a zdarma. Nicméně, výchozí nastavení PHP není vhodné pro ostrý provoz. Zde je kontrolní seznam nastavení, které jsou doporučeny oproti výchozímu nastavení.
1) Zakázat manipulaci se soubory na jiných serverch
allow_url_fopen = Off
2) Zakázat globální registraci
register_globals = Off
3) Omezit kde PHP může číst a zapisovat
open_basedir = /var/www/htdocs/files
4) Omezit velikost souborů pro POSTING, využití paměti a doby běhu
max_execution_time = 30 ;Max script execution time
max_input_time = 60 ;Max time spent parsing input
memory_limit = 16M ;Max memory used by one script
upload_max_filesize = 2M ;Max upload file size
post_max_size = 8M ;Max post size
5) Zakázat zobrazování chyb
display_errors = Off
log_errors = On
6) Skrýt použití PHP
expose_php = Off
7) Pokročilý safe_mode
safe_mode = Off safe_mode_gid = On
Pozn: omezit zápis jen na soubory vlastněné Apachem, ale povit čtení i na ostatní
8) Pomocí httacess povolit čtetní jen určitých souborů – podle přípony
<filesmatch>
Order allow,deny
Deny from all
</filesmatch>
9) Kontrolovat obsah vstupních parametrů
Použít např. tyto funkce: filter_var(), filter_input(), filter_id() etc.
10) Zabezpečit proměnné vstupující do SQL dotazů
mysql_real_escape_string(): Escapes a string for use in SQL statementsmysql_escape_string()
addslashes()
quoteSmart()
11) Filtrovat výstupní data – zapránit tak spouštění škodlivého JS kódu
htmlspecialchars()
htmlentities()
strip_tags()
strtr()
12) Zabránit útokům typu INJECTION
a) Remote File Injection
př: include($_GET[‘content’] . ‘.php’);
b) Local File Iclusion
př: require_once($LANG_PATH . ‘/’ . $_GET[‘lang’] . ‘.php’);
b) Command Injection
např zneužití funkcí exec(), shell()
zdroj: http://www.saynotes.com/12-essential-checks-on-securing-php/