vstupní data zabezpečení

Každý php developer ví, že ošetřit vstupní pole formulářů je nutnost. Vždy existuje riziko napadení (např. skrze SQL injection), ale také riziko zanesení nevhodných znaků nebo sekvencí znaků. I jen obyčejný apostrof se stává bez ošetření zkázonosným. Jak tedy data filtrovat?Často používám filtrování přes SESSIONS. Data z formuláře bývají většinou předávána v poli POST, přičemž je běžně zapotřebí nejprve je před odesláním někam dočasně uložit. Zejména vícestránkové formuláře to vyžadují (nepracujete-li se skrytým html kódem pomocí jQuery).

Následující ukázka kódu může filtrovat na pár řádcích v podstatě libovolně velké pole dat.
Funkce str_replace zde nahrazuje apostrof escape sekvencí ' , která při vkládání do databáze (nebo i do sessions) již nemůže dělat žádné problémy (narozdíl od apostrofu, který by bylo nutné uvést se zpětným lomítkem, což ale nebývá zrovna ideální řešení).

$k = key
$v = value

Do smyčky lze zařadit další filtry. Jedinou nevýhodou tohoto postupu může být to, že filtruje všechna data. Pokud byste například u jednoho vstupního pole chtěli aplikovat jiný filtr, ale u ostatních by byl nežádoucí, potom nelze tuto techniku jednoduše použít. Navíc u velmi velkých formulářů to způsobí určité prodlení, které může uživatel vnímat jako pobídku k dalšímu kliknutí na tlačítko pro odeslání formuláře.

Funkce pro filtrování vstupních dat

htmlspecialchars()

znak čím je nahrazen
 & (ampersand)  &
  (dvojitá uvozovka)  "
  (jednoduchá uvozovka)  '
< (less than) &lt;
> (greater than) &gt;

 

addslashes()

Přidává před uvozovky zpětné lomítko \ . (Stejně tak se používá pro přidání zpětného lomítka chceme-li uložit samotné zpětné lomítko.) Při pozdější práci s daty je zapotřebí tato lomítka zase odstranit, proto je často lepší nahrazovat uvozovky s funkcí

 

strip_tags()

Odstraní z řetězce všechny html a php tagy.

Funkce trim() je zde pro odstranění nevhodných znaků ze začátku a konce řetězce. Těmito znaky bývají mezera, tabelátor, \n, \r a \0.