"Dostatečná dezinfekce" důkladně závisí na tom, o jakém prostředí mluvíte. Sanitace pro MySQL by měla být považována za zcela oddělenou z dezinfekce pro webový výstup a měli byste s nimi zacházet samostatně, abyste se vyhnuli spoustě potíží.
Dezinfekce pro MySQL
mysql_real_escape_string()
dezinfikuje část dat a zajistí bezpečné vložení do SQL dotazu.- Jakýkoli jiný typ škodlivých dat, jako jsou značky HTML uvnitř řetězce, by měl být absolutně ignorován. Pokusy o manipulaci zde vás přivedou k bolestem hlavy, když se s ním později po vyjmutí z databáze pokusíte „zrušit manipulaci“. Špatná „webová data“ nemohou poškodit vaši databázi.
Dezinfekce pro výstup
htmlspecialchars($val)
v době výstupu zabrání vykreslení jakýchkoli škodlivých značek, protože<
a>
znaky jsou převedeny na jejich reprezentace entit a nejsou vykresleny jako oddělovače značek.- Použijte
ENT_QUOTES
modifikátor, pokud vydáváte něco, co je uvnitř citovaného atributu prvku HTML, například<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
To by mělo být vše, co potřebujete, pokud nemáte speciální požadavky. strip_tags()
by ve skutečnosti neměl být používán k dezinfekci, protože může být oklamán špatně vytvořeným HTML. Sanitizace je důstojným cílem, a pokud dokážete udržet své kontexty oddělené, budete mít méně problémů s manipulací s daty mezi nimi.