(Ne)zpracování „nebezpečných“ znaků
- _Martin_
- Generous Backer | 679
Dneska jsem testoval parametry, které se předávají metodám presenteru, a poněkud mě zaskočilo, že není problém do aplikace propašovat i různé řídící znaky včetně toho s ASCII kódem 0. Pokud bychom tato data nekontrolovali sami, není problém si databázi zanést spoustou nesmyslných znaků, které se následně bez problémů vypíší na stránce (a to bohužel i se zapnutým filtrem CurlyBrackets a s dibi jakožto DB rozhraním). Opravdová lahoda to je, pokud posíláte stránku s hlavičkou „application/xhtml+xml“ – potom se v některých prohlížečích objeví pouze „parse error“ a konečná, vystupovat. Tak si teď kladu otázku: jde o bug, nebo je na vině moje vlastní blbost?
- David Grudl
- Nette Core | 8228
To je pravda, celou věc se pokusím více rozebrat.
- Nette\Application automaticky kontroluje všechny vstupní řetězce, aby byly UTF-8 validní. Pro URL to má oporu v RFC 3986, který je sice poměrně nový, ale široce akcepovaný prohlížeči.
- Do Unicode patří i kontrolní znaky, tzv. C0 a C1.
- V XML nelze vypisovat znaky C0 (s výjimkou x9, xA, xD) a C1 (leckdy ani ne entitou), plus řadu dalších znaků z vyšších rozsahů.
Otázkou je, jestli při kontrole UTF-8 validity zároveň také odstraňovat znaky C0 a C1. Jinými slovy, jde o to, jestli HTTP request může obsahovat jen řetězce nebo i binární data.
- David Grudl
- Nette Core | 8228
Tak jsem nad tím dlouho přemýšlel a zkusil jsem v poslední revizi znaky C0 a C1 přece jen blokovat. Zatím experimentálně, pokud se neozvou hlasy proti, zůstane to tam natrvalo.
- Patrik Votoček
- Člen | 2221
David Grudl napsal(a):
…pokud se neozvou hlasy proti, zůstane to tam natrvalo…
Ať si to tam klidně zůstane. Ale dal bych možnost to něják vypnout. Standartně by to mohlo být zapnuté. Ale kdyby to náhodou potřeboval někdo vypnout tak mu to „jednoduše“ umožnit.