Accept és XSS
Sziasztok!
Éppen gondolkodtam azon, hogy a visszamenő mime típust hogyan határozzam meg egy oldalnál. Szeretnék json és html kombinált oldalt csinálni. A diszkrét javascript annyira nem érdekem, viszont az oldal egyes részeit szeretném, ha el lehetne érni javascript nélkül is.
Arra gondoltam, hogy az accept http header-rel application/json-t küldök, ha json-t várok vissza válaszul, egyébként meg a böngésző belövi, hogy text/html vagy mittomén.
Aztán leesett, hogy esetleg az accept header nézésével meg lehet akadályozni a gyengébb kép beszúrásos XSS támadásokat. Mert mondjuk ha egy html kimenetű oldalra kép az accept, akkor nyilvánvalóan képként szúrták be valahol.
Erről mi a véleményetek?
(Nyilván csekély védelmet nyújt, de szerintem jobb, ha minél több védelmi vonalat halmoz fel az ember.)
■ Éppen gondolkodtam azon, hogy a visszamenő mime típust hogyan határozzam meg egy oldalnál. Szeretnék json és html kombinált oldalt csinálni. A diszkrét javascript annyira nem érdekem, viszont az oldal egyes részeit szeretném, ha el lehetne érni javascript nélkül is.
Arra gondoltam, hogy az accept http header-rel application/json-t küldök, ha json-t várok vissza válaszul, egyébként meg a böngésző belövi, hogy text/html vagy mittomén.
Aztán leesett, hogy esetleg az accept header nézésével meg lehet akadályozni a gyengébb kép beszúrásos XSS támadásokat. Mert mondjuk ha egy html kimenetű oldalra kép az accept, akkor nyilvánvalóan képként szúrták be valahol.
Erről mi a véleményetek?
(Nyilván csekély védelmet nyújt, de szerintem jobb, ha minél több védelmi vonalat halmoz fel az ember.)
Akár...
Alap
Mondjuk elgondolkodtam rajta, hogy az info mentésekor kiescapelem a speciális karaktereket, aztán meg html esetén phpvel, json esetén meg javascripttel oldom meg az unescapet. Mivel az oldalon leginkább json formában utaznak majd a dolgok, ezért ez megtakarítás lenne. Persze ugyanezt el lehet érni megfelelő cache-eléssel is :-)
XSS
Yepp
Egyelőre csak ötlet szintű, majd tesztelni fogom, amint sikerült újra életre kelteni a vinyómat. (Az mondjuk még el fog tartani néhány hétig.)
Azért tetszene ez a megoldás, mert sokkal szabványosabb, mintha custom http headerbe raknám.
Egy-két dolgot találtam csak ezzel kapcsolatban:
http://www.grauw.nl/blog/entry/470
Itt a kitörölt és null-ra állított headerek. Szóval mondjuk lehet */* is, ami nekem újdonság (nem néztem még sosem az accept headereket), alapjáraton meg ugye a képeket meg a html-t engedélyezi a stuff.
Ff-ben néztem img src headert, és ezt kaptam:
Hát nem az, amit vártam. És ha már ff-ben sem az, akkor gondok vannak :-)
Ettől függetlenül a json detect az marad accept headeres, mert ha fixen átírom application/json-ra, akkor azt azért elég jól meg lehet különböztetni pl egy hosszú listától.
Az image megvalósítása végülis így is lehetséges, amíg nem */* vagy text/html az elvárt az IMG tagben. Max kicsit bonyolultabb lesz a regex.
Ahogy nézem a setRequestHeader minden böngészőn jól megy, szóval azzal nem lesz gond.
Accept elvileg minden böngészőn kell, hogy menjen. A fontosabbakon biztos, a többi meg annyira nem érdekel, megelégszem a 99.9%ommal :-)
Az oldal jellege olyan lesz, hogy egy minimumot azért elvár a felhasználóktól, szóval pl ie6ra valszeg meg sem lesz írva, max annyit kiteszek, hogy frissítsed a böngésződet, mert elavult stb...