(Ne)zpracování „nebezpečných“ znaků

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
_Martin_
Generous Backer | 679
+
0
-

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
+
0
-

To je pravda, celou věc se pokusím více rozebrat.

  1. 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.
  2. Do Unicode patří i kontrolní znaky, tzv. C0 a C1.
  3. 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
+
0
-

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
+
0
-

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.

_Martin_
Generous Backer | 679
+
0
-

Vida, zase jsem o něco chytřejší. Jinak děkuji za rychlé vyřešení. S názorem vrtáka lze souhlasit, ale zajímalo by mě, zda-li vůbec někdo používá v adresách binární data…?