XSS, kinek a feladata kezelni?

Fórumok

Udv!

Most egy biztonsagi kerdessel fordulok hozzatok.
Jelenlegi projektemben (MySQL adatbazishoz web interfesz) hasznalok egy JS plugint aminek egyik tulajdonsaga, hogy elemeket lehet letrehozni/atnevezni. Ezzel nincs is semmi gond egeszen addig, amig valaki nem probalkozik meg script tag-okat beirni, es kozejuk furmanyos dolgokat amik az adatbazisba szepen befeszkelik magukat. Ugyanis ezt nem kezeli semmi a pluginban.
Amig az inputokat en kezeltem (pl sima text input) addig nyilvan ellenoriztem mit ir be, de itt azt gondoltam a plugin lesz olyan kedves es ezt megteszi helyettem.
Kerdes tehat:
Egy plugin-nak felelossege-e ellenorzni a beirt adatokat?

Hozzászólások

(SZVSZ)
Ha fizetos ha nem, akkor is kell lennie hozza licensnek, es az a mervado ott van a valaszod, amugy ha ingyenes valoszinubb hogy elharitjak a felleoseget, de nagy eselye van hogy ugyanezt az elegans megoldast a zart kodu / fizetos cuccnal is beleirjak.

Szerintem nem fogod meguszni hogy neked keljen filterezni.

felelősség, kötelezettség: fizetős a plugin, és van support, meg írja a honlapján, hogy biztonságos? akkor igen. minden más esetben mastercard. ami ingyen van, vagy akár potom pénzért, esélyes hogy ilyen hiányosságokkal küzd, főleg ha az elkövető még nem futott bele olyan helyzetbe, amikor az ő biztonsági hanyagsága miatt volt mondjuk egy törés az egyik weboldalán

DE, egyszerűbb:

alapvetően a js-től jövő adatokat mindig érdemes validálni, természeténél fogva a user módosítgathat, adhat neki akármilyen adatot, felül is bírálhatja részeit, nem kell sok, egy firebug vagy egy gyári js console. a js ezügyben inkább "fancy", segít az ügyfélnek hogy milyen a helyes formátum, de nem biztonsági rendszer része

mondok egy vad példát, nem biztonsági törésre: rendszeresen használt oldal, mégis lassan töltődik be, már írom is a mezőbe amit akarok, még a maszkolás fel se dolgozódott arra az input-ra, bemegy az adat (pl. egy telefonszám), formázás nélkül, a backend feldolgozza, formátumhiba miatt legjobb esetben (ha nincs újra validálás) beírja a db-be rosszul, és esélyes, hogy több rész is ami használja ezt az adatot hibázni fog.

(lehet hibásan látom, de én nem mindig validálok adatbázisból kiolvasásnál, mivel beíráskor validáltam, de látva néhány ilyen esetet elgondolkoztam...)

Ha ez egy tisztán JavaScript plug-in, akkor egyértelmű, hogy neked kell szerver oldalon kiszűrni, módosítani a nem megfelelő user inputokat.
Hát mit kezdjen szegény JS plugin, amikor meg sem hívódik, hanem pl. Fiddlerrel küld valaki egy gonosz requestet?

Ha jól lenne megírva, akkor megtenné. Ha nem teszi, akkor be kell "csomagolni" úgy, hogy a bemenetére csak az ellenőrzést végző "csomagoláson" keresztül juthasson ellenőrzött adat. Szerintem...

Ha biztos vagy abban, hogy a szerver oldal valid és jól formázott outputot küld, és abban is, hogy tényleg azzal a szerverrel beszélget a kliens, amiről ezt feltételezi, akkor igazad van. Abban a pillanatban, amikor tetszőleges "idegen" szerverrel beszélgetsz (vagy csak nem bizonyosodtál meg arról, hogy a túloldal az, akinek gondolod), attól kapsz adatot, nem lehetsz biztos abban, hogy a túloldal helyesen küld bármit is. Életszagú példa: yum install foo-bar-baz Letölti a csomagot, ellenőrzi, hogy valid-e (gpg), és bizony a struktúrája is ellenőrzésre kerül a telepítés előtt.
De egy xml-ben kommunikáló app is illendően ellenőrzi a szervertől kapott fájlt, hogy helyes-e formailag, és ha kritikus a tartalma, akkor célszerű, hogy valamilyen tartalmi ellenőrzésre is mód legyen.

Szerintem...

Ez egy elég hülye kérdés, lévén van egy alapszabály: !Mindig! ellenőrzünk mindent, szerver oldalon nem szabad olyan eshetőségnek lennie, hogy nem validálod az inputot, a feltételes része az, hogy a kliens nem teszi ezt on the fly.

// Happy debugging, suckers
#define true (rand() > 10)