Validace kódu z DOM nebo escapování svg

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sidrach
Člen | 23
+
0
-

Mám takovou věc a moc mě nenapadá jak ji vyřešit. Jde spíš o princip řešení.

Na stránce mám svg, které mi vygeneruje model na základě navolených částí, tohle svg si uživatel obarví a navolí si části jaké chce, vyplní formy co se k tomu vztahují a pak ho spolu s formem pošle dál. Pokud neprojde validace formu (např. špatný mime type uploadu), proběhne reload a ztratí tak to co si naklikal. Abych tomu předešel, ajaxem si při přechodu na další krok uložím to svg do session odkud se pak načte, pokud došlo k chybě.

A teď.. Jak zajistit, aby mi do toho svg někdo nevložil vlastní php nebo javascript? Výsledek v session totiž neescapuju, protože jsem trotl a nevím jak jinak to udělat, aby to prohlížeč zobrazil a bere se z DOMu, takže se dá ovlivnit uživatelem.

Napadlo mě jenom nebrat celé svg, ale jen pole všech prvků s atributem fill, jejich index v rámci DOM toho svg a jejich hodnotu. Zbytek pak poskládám podle ostatních dat o volbách co už v session mám, protože mě nenapadá jak spolehlivě identifikovat cizí zásah.

petr.pavel
Člen | 535
+
0
-

Nešlo by přes regulární výrazy odfiltrovat všechno kromě tagů SVG?

$clean = preg_replace('/<(!\/?svg|rect)[^>]*>/', '', $dirty);

Teď z hlavy nevím, jestli funguje (!…|…), asi to bude spíš (?!…|…).

sidrach
Člen | 23
+
0
-

petr.pavel napsal(a):

Nešlo by přes regulární výrazy odfiltrovat všechno kromě tagů SVG?

$clean = preg_replace('/<(!\/?svg|rect)[^>]*>/', '', $dirty);

Teď z hlavy nevím, jestli funguje (!…|…), asi to bude spíš (?!…|…).

Díky za nápad, nakonec jsem to vyřešil tak jak mě napadlo prvně, mám jen omezenou množinu změn co může uživatel udělat, takže je easy si je z DOM přes jquery vybrat a pak je zase jako json vrazit zpátky. Navíc pak posílám výrazně míň dat do session.