Autor Zpráva
krakatice
Profil *
Ahoj. Chtěl bych se zeptat kdy už je nutné ošetřovat posty. Je nutné to dělat i u postu, který nejde do databáze? Třeba, když zachytim post hesla při registraci... porovnám ho s kontrolou hesla a zahašuju... je vůbec nutné ho třeba ošetřovat pomocí htmlspecialchars a podobně? Děkuji
jenikkozak
Profil
krakatice:
je vůbec nutné ho třeba ošetřovat pomocí htmlspecialchars
Ne. Funkce htmlspecialchars se používá u textů, které se vypisují do HTML stránky.

Viz Escapování - definitivní příručka
krakatice
Profil *
Já jsem tuhle příručku četl, ale všude vám napíšou něco jinýho.
Alphard
Profil
krakatice [#3]:
Uvedená příručka je zcela důvěryhodná. Můžete se ptát na konkrétní věci, které jsou s ní, podle jiných zdrojů, v rozporu.
Pro pochopení, kdy je třeba escapovat, je nutné pochopit význam samotného escapování. I vstup, který nejde do db, ale je např. přímo vypsán, je třeba escapovat podle kontextu, kam se vypisuje.

Pokud se 2 vstupy hesel porovnávají, vypočítává se (v php) jejich hash a ten se ukládá do db, není třeba je escapovat. Ale pokud by se použila hashovací funkce na úrovni databáze, již se escapovat musí, protože se vstup předává do jiného kontextu.
(Ačkoliv většinu hashů není třeba escapovat, vstupy do db se zpravidla preventivně ošetřují vždy.)
krakatice
Profil *
Alphard: nicméně třeba ošetřovat post kterej v php proměnim do tvaru sha512 před vstupem do databáze je naprosto zbytečné ne? Pokud ne tak proč?
Alphard
Profil
Není to nutné, to jsem psal už výše.
Jan Tvrdík
Profil
krakatice:
Ale není to ani zbytečné. Úmyslně neošetřovat vybrané vstupy na základě znalosti jejich struktury přináší do kódu zbytečnou komplexitu navíc, které snižuje bezpečnost. Ošetřovat plošně všechny vstupy do databáze je jednodušší a spolehlivější řešení.
krakatice
Profil *
A jakym způsobem by se tedy dalo nějakym postem zaútočit jen na php, když to není zbytečné? Bavím se o tom, že ten post se nevypisuje nikam ven, takže nejdou použít html tagy. Je post nebezpečný i pro php?

Jan Tvrdík : plošně vim jenom o použití Magic quotes, ale to jsem četl, že není už doporočované a v novějších php už se to ani nepodporuje. To jsem taky nepochopil proč. Však to fungovalo ne? Člověk jenom musel počítat s tím, že všechno v databázi je uloženo v tomto tvaru. Neznáte tedy něco vhodného pro plošné použití?
Jan Tvrdík
Profil
krakatice:
Pozor, říkal jsem plošně ošetřit všechny vstupy do databáze. To je něco dost jiného, než plošně ošetřit všechny vstupy tak, jako kdyby měly jít do databáze (což v zásadě dělalo magic quotes). To je naopak zcela špatně.

Plošně ošetřit všechny vstupy, které jdou do databáze, umí pravděpodobně všechny rozumné knihovny pro práci s databázi (např. dibi nebo Doctrine). Alternativně lze (alespoň ve většině případů) použít vázaní proměnných, které podporuje MySQLi a PDO.
krakatice
Profil *
Jan Tvrdík: aha no. to máte vlastně pravdu že magic quotes ošetří uplně všechny vstupy tak, jako kdyby měly jít do databáze. A proč je to zcela špatně?
Alphard
Profil
krakatice:
Píšete, že jste četl Escapování - definitivní příručku, ale zdá se, že ji vůbec nechápete. V první řadě je třeba chápat význam pojmu kontext – je to jazyk, ve kterém bude daný vstup interpretován. Je to zcela zásadní, při konkrétní implementaci nelze mluvit o obecném escapování, to neexistuje. Vždy se escapuje pro nějaký kontext, tj. escapujeme pro kontext html, js, sql; pro každý kontext jinak. Z toho plyne odpověď na otázku v [#10]. Escapování pro špatný kontext není escapování, ale rozbití vstupu (protože se ošetřuje špatná množina znaků).
A víc to vysvětlit nedokáži, doporučuji přečíst znovu Escapování - definitivní příručku, Escapování – Wikipedie a cokoliv dalšího, z čeho to pochopíte.
krakatice
Profil *
Alphard: možná jste tu příručku měl psát vy. Od vás to chápu hned. Děkuji za vysvětlení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0