Ošetření vstupních proměnných
Z MiS
(Rozdíly mezi verzemi)
(Příklad filtrování) |
m (→filter_var: Oprava vzhledu.) |
||
(Není zobrazena 1 mezilehlá verze od 1 uživatele.) | |||
Řádka 17: | Řádka 17: | ||
Funkce se snaží nahrazovat „podezdřelé“ znaky (takové, které by mohly být zneužity k útoku) jejich bezpečnými alternativami. | Funkce se snaží nahrazovat „podezdřelé“ znaky (takové, které by mohly být zneužity k útoku) jejich bezpečnými alternativami. | ||
− | <div class="Priklad">Třeba znak <, který by mohl být použit k vložení značek HTML, nahradí za HTML element &lt;, který se zobrazí stejně, ale značku s ním vložit nelze.</div> | + | <div class="Priklad">Třeba znak <code><</code>, který by mohl být použit k vložení značek HTML, nahradí za HTML element <code>&lt;</code>, který se zobrazí stejně, ale značku s ním vložit nelze.</div> |
; Parametry | ; Parametry |
Aktuální verze z 7. 5. 2014, 07:32
Proč bychom měli proměnné ošetřit?
Pokud v PHP kódu nebo SQL dotazech používáme data, načtená ze vstupu (to je typické pro jazyk PHP), měli bychom si ověřit, že potenciální útočník do dat nezahrnul kód, který by mohl narušit funkci aplikace.
Techniky útoku založené na podsouvání záměrně poškozených dat se nazývají:
- code injection
- code insertion
- cross-site-scripting (CSS — nepleťte s kaskádovými styly)
Více o těchto tématech například na: TechnicalInfo.net → Cross-site-scripting.
Pro základní vyfiltrování podsunutého kódu bychom při čtení vstupu z URL adresy či formulářů a dalších podobných zdrojů měli použít alespoň funkci filter_var
.
filter_var
Funkce se snaží nahrazovat „podezdřelé“ znaky (takové, které by mohly být zneužity k útoku) jejich bezpečnými alternativami.
Třeba znak
<
, který by mohl být použit k vložení značek HTML, nahradí za HTML element <
, který se zobrazí stejně, ale značku s ním vložit nelze.- Parametry
- vstup ... text, který chceme kontrolovat
- typ filtru ... jaký filtr chceme uplatnit
- Typy filtrů
- FILTER_SANITIZE_FULL_SPECIAL_CHARS ... nahradí všechny speciální znaky z řetězce
- FILTER_SANITIZE_NUMBER_INT ... odstraní znaky, které netvoří čísla
- FILTER_SANITIZE_ENCODED
- FILTER_VALIDATE_BOOLEAN ... převede na logickou hodnotu
- FILTER_VALIDATE_INT ... převede na číselnou hodnotu
Více viz: W3Schools.com → PHP Filter Functions