Diskuze: Kde kontrolovat PHP a SQL Injection
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Já ošetřuju kdy je to třeba. GET jsem nikdy switchem neošetřoval,
protože jsem měl vždycky náhodné (uživatelsky zadávané) hodnoty, které
by se těžce získávali, kdybych to dělal na tvrdo. Při vstupu do databáze mi to
kontroluje PDO, při výstupu ve viewech zase framework. Takže vlastně toho
moc neřeším.
Ošetřovat máš právě naopak až na konci, kde data vkládáš do DB nebo do HTML. Ošetřovat to při získání je špatně.
Switch mám hlavně na výběr stránek ze souborů:
switch($_GET['url']){
case 'home':
case 'about':
case 'contact':
$url = $_GET['url'];
break;
//...
Používám MySQL
Co je na tom tak špatného? Data ověřím a pak na nich zavolám metodu pro práci s databází.
To mi zase zpracovává Router, takže jsem se k tomu vlastně nikdy
nedostal.
Data si uložím do databáze ošetřené a při výpisu si je transformuji dle libosti, jak je zrovna chci použít.
Je to špatně, protože si pak do DB ukládáš entity a to se opravdu nedělá. Ale já už jsem tu na úpravu kódu v PHP resignoval, dělejte si to jak chcete, stejně časem zjistíte proč to tak být nemá.
Co je špatného na tom, když si uložím data do DB ošetřené tímto způsobem?
htmlspecialchars($text, ENT_QUOTES);
Místo 8mi znakový <script> se ti tam uloží 14ti znakový <script>. Zásada je ukládat data do DB surová a teprve při výstupu je ošetřit tak, jak právě potřebuješ.
Takže stačí v podstatě ošetřit apostrofy, uvozovky, popř. jiné speciální znaky a při výpisu teprve ošetřit html tagy. Chápu to tak správně?
Myslím tím např., že zápis do DB ošetřím mysql_real_escape_string() a výpis z db ošetřím htmlspecialchars().
Přesně tak. Pokud použiješ např. PDO a parametrizované dotazy, nebudeš
se muset starat o SQL injection.
Na výstupu si pak ten řetězec upravíš tak, jak ho zrovna potřebuješ
(někdy budeš určitě potřebovat i něco jiného, než jen
htmlSpecialChars).
Zobrazeno 13 zpráv z 13.