XSS védelmet hova?
Azon gondolkodtam, hogy az XSS védelmet hova kellene beépíteni? Jelenleg a kontrollerben van megvalósítva (kimenő adaton szűrés, mielőtt a nézetnek átadásra kerül), de mivel ez a megjelenítéssel kapcsolatos dolog, talán jobb lenne a nézetben megoldani.
Vélemény?
■ Vélemény?
XSS védelem >= output escape
Amit nem igazán értek, hogy lehet a kontrollerben (ez a fajta) a védelem? Ha általában az XSS védelemről beszélünk,annak nagyon fontos komponensei vannak a kontrollerben, de az escape-elés milyen módon krül ide? Htmlspecialhars-al írod a DB-be a stringeket?
Fejtsd ki bővebben...
Metódus
Ha már nem jelez hibát a validátor, akkor mentésre kerülnek az adatok, pl. adatbázisba.
Amikor kírásra kerül sor, akkor mondjuk egy blog post, vagy komment BBCode-os szűrésen megy keresztül (ez a view egy helper-je), ami automatikusan kiszűri a HTML elemeket.
A BBCode parser-en át nem kerülö adatokat, pedig a kontrollerben egy erre szakosodott clean metódus csonkítja adott hosszra (ha kell), majd egy htmlspecialchar-t futtat rajta.
A clean függvény által adott escape-elt string kerül átadásra a view-nak.
(Természetesen a COOKIE-ból olvasott adaton is átmegy a clean.)
Ha jól látom..
észrevétel
Eredeti kérdésre: magának az escapelésnek szerintem is abszolút a view-ban van a helye, pont azért, mert escapelni mindig adott környezetnek megfelelően kell. Nálunk pl. a symfony-ban is jelen levő módszer van, a TemplateView nevű osztály (HTML jön ki belőle) a controllertől kapott változókat automatikusan escapelve teszi elérhetővé a template-ben. El lehet érni a "raw" verziót is, de ezt már külön így kell kérni, ergó tudatos döntés a programozótól, de véletlenül nem maradhat egy kiírt változó nem escapelve. Ez egy jó kis CoC.
Re: észrevétel
Ez azért van így, mert ha csak BBCode-dal engedem meg a formázást, akkor ugye minden HTML elemet ki kell gyilkolni. Viszont ha keverni akarom (tudom nem szép, de van létjogosultsága; alap esetben HTML kódok és BBCode speciális esetekre – pl. YouTube videó embed), akkor már nem kell kiszűrni a HTML-t.
Amikor felvetődött az, hogy a form helperben automatikusan meg lehetne oldani az esacpe-elést, valamint a maxLength-nek megfelelő csonkítást (biztos, ami biztos), akkor már sejtettem én is, hogy a view-ban lenne ennek a helye, csak megerősítésre volt szükségem.
Ami viszont az automatikus escape-et illeti megfontolandó. Felkerült a todo listára :-)
ne csonkítsunk
MaxLength
Azaz a maxlength-nél hosszabb stringet normál körülmények között nem is tud POST-olni (persze Firebug és egyebek most nem téma). Ha pl. névnek mégis hosszabb string jön (hackelés) és még van hiba a form adataiban, akkor az input-ba való visszaírásnál lesz az input maxlength értékének megfelelően csonkítva a névnek megadott string. A DB-be írásnál meg úgyis csak a megadott maximális hossz lesz eltárolva (varchar mezőbe).
hackelés
Még egy feltétel
Így biztosan nem jut el a mentésig a folyamat. Viszont a hibajelzésnél, adatok form-ba való visszaírásánál így is van értelme csonkítani, mert látni fogja a próbálkozó, hogy nem fogja tudni beküldeni a hosszabb stringet.
Én nem mennék ilyen messzire