Saját HTML ($_POST) feldolgozó
Sziasztok!
Támadt egy ötletem, nem tudom, jó-e. Egy korábbi fórumtémában, ahol eredetileg SQL injection volt a kérdés, felmerült a HTML-szűrés (XSS, CSRF szempontból) is, ezzel együtt a HTML Purifier. Ez utóbbival egy pár gondom van:
- Kb. akkora (nagyobb), mint a framework, amit használok (CodeIgniter);
- Számomra annyi lehet (időben) rendesen átlátni, mint írni egy jóval egyszerűbbet;
- Elég nehézkes lenne szerintem ebbe a fw-be jól "bepasszítani" (eddig meg sem próbáltam);
- Kb. 100x annyit tud, mint nekem szükséges.
Ezek miatt úgy gondoltam, írok egyet. (A CodeIgniter-nek nincs sajátja, a Typography Class csak "stilizál", de nem szűri pl. a tag-ek attribútumait.)
Amikre gondolok (szempontok és megvalósítás):
- Kicsi (és gyors) legyen, mint a CI többi része is. Ha végére is érek, ez nem lesz gond.
- Megengedő értékelés, mind a tag-ek, mind attribútumaik terén (itt kérdés: így elég jól lehet XSS-t védeni?).
- Ha egy tag nem megengedett, a benne lévő esetleges szöveg ne vesszen el, hanem pl. kerüljön helyette más tag-pár közé.
- Könnyen konfigurálható legyen (pl. az osztály betöltésekor, mint más CI osztályok).
- Fentiek megvalósítására a PHP DOMDocument osztályát használnám, mégpedig úgy, hogy miközben elemenként olvasom a feldolgozandó HTML-t, ezzel "együtt" egy másik példányban gyártom a másikat.
- Ennek hátránya, hogy terjedelmesebb HTML esetén sok memóriát megehet, de nálam nemigen fordul elő, sőt, 100kB-nyi HTML-nél több szinte sehol. (Ebből a 2 DOM szerintem max. 3-4 megán elfér.)
- Még nem tudom, hogy mennyire működőképes ez az "egyiket olvasom, másikat írom" törtnet, de talán egyszerűbb, mint kibontani tömbbe, aztán gyártani abból az újat. Viszont ezzel meg rekurzív fv. kell, akkor azt meg védeni kell max. hívásszámmal vagy mással.
- A hibás tag-ek javítása nem lényeges, de eltávolításuk igen.
Kérlek írjatok véleményt erről, ha abszolút rossz ötlet, inkább bele sem kezdek. Ha van valakinek biztonsági ill. egyéb (megvalósítási) ötlete/tanácsa, annak is örülnék.
(Én jó ötletnek tartanám az eredményt akár publikálni is, ehhez azért valakinek még ellenőrizni kéne, de ez még messze van.)
Köszi, Pepita
■ Támadt egy ötletem, nem tudom, jó-e. Egy korábbi fórumtémában, ahol eredetileg SQL injection volt a kérdés, felmerült a HTML-szűrés (XSS, CSRF szempontból) is, ezzel együtt a HTML Purifier. Ez utóbbival egy pár gondom van:
- Kb. akkora (nagyobb), mint a framework, amit használok (CodeIgniter);
- Számomra annyi lehet (időben) rendesen átlátni, mint írni egy jóval egyszerűbbet;
- Elég nehézkes lenne szerintem ebbe a fw-be jól "bepasszítani" (eddig meg sem próbáltam);
- Kb. 100x annyit tud, mint nekem szükséges.
Ezek miatt úgy gondoltam, írok egyet. (A CodeIgniter-nek nincs sajátja, a Typography Class csak "stilizál", de nem szűri pl. a tag-ek attribútumait.)
Amikre gondolok (szempontok és megvalósítás):
- Kicsi (és gyors) legyen, mint a CI többi része is. Ha végére is érek, ez nem lesz gond.
- Megengedő értékelés, mind a tag-ek, mind attribútumaik terén (itt kérdés: így elég jól lehet XSS-t védeni?).
- Ha egy tag nem megengedett, a benne lévő esetleges szöveg ne vesszen el, hanem pl. kerüljön helyette más tag-pár közé.
- Könnyen konfigurálható legyen (pl. az osztály betöltésekor, mint más CI osztályok).
- Fentiek megvalósítására a PHP DOMDocument osztályát használnám, mégpedig úgy, hogy miközben elemenként olvasom a feldolgozandó HTML-t, ezzel "együtt" egy másik példányban gyártom a másikat.
- Ennek hátránya, hogy terjedelmesebb HTML esetén sok memóriát megehet, de nálam nemigen fordul elő, sőt, 100kB-nyi HTML-nél több szinte sehol. (Ebből a 2 DOM szerintem max. 3-4 megán elfér.)
- Még nem tudom, hogy mennyire működőképes ez az "egyiket olvasom, másikat írom" törtnet, de talán egyszerűbb, mint kibontani tömbbe, aztán gyártani abból az újat. Viszont ezzel meg rekurzív fv. kell, akkor azt meg védeni kell max. hívásszámmal vagy mással.
- A hibás tag-ek javítása nem lényeges, de eltávolításuk igen.
Kérlek írjatok véleményt erről, ha abszolút rossz ötlet, inkább bele sem kezdek. Ha van valakinek biztonsági ill. egyéb (megvalósítási) ötlete/tanácsa, annak is örülnék.
(Én jó ötletnek tartanám az eredményt akár publikálni is, ehhez azért valakinek még ellenőrizni kéne, de ez még messze van.)
Köszi, Pepita
Helyedben összeállítanék
szerk:
Ahogy nézem egy puszta validálás neked nem elég... Nem biztos, hogy ez az XSD-s megoldás annyira egyszerű lenne, mint elsőre gondolná az ember. Űrlaponként erősen változhat, hogy mit fogad el a rendszer... Kevésbé újrafelhasználhatóvá teszi az egészet, ha egy tök más nyelvet berántunk ilyen célra. Nehéz megmondani a validálás eredményéből, hogy pontosan mi nem stimmel. Mondjuk egy olyan űrlapon, ahol vissza kell írni, hogy pl a jelszó legalább 6 karakter kell, hogy legyen, ott meg vagyunk lőve.
Egyébként az első probléma, amibe bele fogsz futni, hogy mi van, ha nem valid html-t küldenek, és nem tudod beparsolni... Most vagy visszaküldöd, hogy nem valid, vagy írsz egy formai validálást és javítást, ami vagy működik, vagy nem...
Én mondjuk kapásból úgy állnék neki, hogy nem megengedő rendszert írnék, és valami olyat, ami kijelzi a hibát is. Pl, hogy nincs jogosultságod onmouseover attribútum használatára, stb...
XSLT.
Milyen igaz. Nekem
Symfony2 HttpFoundation Component
nezd meg ezt:
http://symfony.com/doc/current/components/http_foundation/introduction.html#request
nem biztos, hogy jo neked, csak egy otlet :) nem eri meg a spanyolviszt feltalalni... :)
Ne tedd.
- Ha csak egyszerű dolgokra fogod használni, elég gyorsan át lehet látni. A doksik elég jók, tehát később sem lesz gond. Érdemes is megtanulni.
- Google-ben számtalan eredményt ad, ha a Codeigniter és HTML Purifier szavakra keresel. Nem tűnik ördöngősségnek.
- Ha többet tud, az csak jó. Később még lehet szükség lesz rá.
Köszönöm a véleményeket
Biztos, hogy megengedő cuccost akarok, és azért gondoltam a DOM-bejárásra, mert így a bármiféle jogosultsági/attribútum-kérdés kívülről könnyen konfigolható. Pl. a megengedett attr. mehet, többi nem <> ha van benne nem megengedett, egészet visszadobom.
A hibás HTML javítására egyelőre nem készülök (esetleg későbbi verzióban), arra megint csak jó a PHP, hogy errort dobjon, ha hibás (és ezt elkapom). Jelenleg wysiwyg-től származó post miatt gondolkodom rajta, abban (mert jó eszközt használok) csak akkor van HTML hiba, ha a Júzer kézzel írkált HTML-t. Hát ne írkáljon, ha nem tud.
CodeIgniter - HTML Purifier: leírtam mikért nem akarom utóbbit, OK, integrálni nem lehet túl nagy gond, de az, hogy sokan használják, még nem jelenti azt, hogy nekem is az a legjobb. (Ha senki sem csinálna spanyolviaszt, akkor nem lennének ilyen eszközök sem.)
Értem én
Stackoverflow-n mindenképpen nézz utána, hirtelen például:
- XSS - Which HTML Tags and Attributes can trigger Javascript Events?
- Strict HTML Validation and Filtering in PHP
regexp
Talán ezért.
Véleményes vélemény, de van
HTML is not a regular
Ez ténymegállapítás.
Nem!
Ja, én is ezt linkeltem, csak
Kizárt
Ez az.