Validace kódu z DOM nebo escapování svg
- sidrach
- Člen | 23
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
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
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.