Pereiti prie turinio

CodeIgniter XSS


Svečias Donatis07

Rekomenduojami pranešimai

Svečias Donatis07

Sveiki,

 

kiek žinau, CI framework'as turi funkciją apsaugančią nuo XSS atakų, tačiau tik dabar sugalvojau viską pratiktinti ir radau, jog mano formos neapsaugotos. Žinoma, kad neapsaugotos, nes dėl neišmanymo (kadangi neseniai pradėjau naudoti CI ir apskritai programuoti OOP) visas post formas parašiau ranka:

<form action="#" method="post" id="write-answer" class="write-thread-answer post">
	<input type="hidden" name="thread" id="thread-post" value="<?=$thread["thread_id"]?>" />
	<div>
		<textarea name="answer" id="thread-answer" placeholder="Atsakymas"></textarea>
	</div>
	<div>
		<input type="text" name="author" id="thread-author" placeholder="Jūsų vardas" class="fl-small" />
		<input name="submit" type="submit" id="submit" value="Publikuoti" />
	</div>
</form>

 

Patarkite, prašau, kaip dabar su viskuo susitvarkyti... Postinu formą su ajax, su php patikrinu POST - is_numeric, isset ir kt... Bet įrašius <script>alert('xss')</script> ir postinant formą ir gaunu popupą, kuris išsisaugo į db...

Dabar jau nebežinau, ar išradinėti dviratį ir postinamus duomenis tvarkyt su html entities ir strip tags, ar ką daryt...

 

Kaip ir minėjau, kadangi neseniai tik pradėjau visa tai naudotis, tai per daug nepykit :)

 

----

Prie to paties dar vienas klausimas:

šiuo metu viską rašau su controleriu ir view'su, bet modelio nenaudoju - ar tai didelė klaida?

Redagavo Donatis07
Nuoroda į pranešimą
Dalintis kituose puslapiuose
Svečias Donatis07

šitą bandžiau bet tada postinant formą gaunu error'ą...

 

An Error Was Encountered

 

The action you have requested is not allowed.

 

Edit:

Sorry, pamelavau. Bandžiau su $config['csrf_protection'] = TRUE;

Tuomet mesdavo tą error'ą.

 

Dabar nustačiau $config['global_xss_filtering'] = TRUE tai vietoj <script> tago gaunu [removed] ir lyg suveikia viskas... Tai čia ir buvo sprendimas ar dar kažką daugiau reikėtų galvot - strip tags ir pns?

Redagavo Donatis07
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Models - klasės, kuriose atliekami visi veiksmai su duomenų bazėmis, pvz. reik išgauti vartotoją, tai pasirašai metodą model klasėje kaip pvz. getUserById($id) ir naudoji jį controller.

Controllers - Vieta kur atliekami pagrindiniai programos veiksmai, t.y. formų validacijos, duomenų išgavimas su apsirašytais model metodais, visokie tikrinimai, apdorojimai ir t.t. Žodžiu visa programos logika čia. Taip pat nėra gera praktika duomenis iš duomenų bazės išgauti tiesiogiai controller'yje.

Views - turbūt ir taip aišku, visas duomenų atvaizdavimas.

 

P.S. Dėl CSRF, jei naudosi jį, tai geriau pasirašyk savo, nes kiek anksčiau naudojau CI, tai tas CSRF pastoviai pjaudavosi ypač jei naudoji ajax.

Redagavo w3ber
Nuoroda į pranešimą
Dalintis kituose puslapiuose
Svečias Donatis07

Visgi tuomet teks persidaryt visus controlerius, nes dabar viską iš db juose traukdavau :) views - viskas aišku - ten tik if, foreach (iš php) i html naudoju :)

 

su tais csrf nelabai išvis dar suprantu kas ir kaip... xss truputį pasikeičiau dar system failus ir atrodo normaliai suveikia...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

CSRF trumpai: tavo saitas turi formą, niekaip netikrina, iš kur ji postinta. Piktavalis svetainėje pasidaro tokią pat formą ,einančią pas tave, auto-išsiunčiamą su Javascript. Suvilioja tavo lankytoją apsilankyti pas save, forma automatiškai išsiunčiama su vartotojo sesija (nes tai daroma per vartotojo naršyklę). Piktavalis ką tik padarė kažkokius veiksmus su vartotojo paskyra tavo svetainėje.

 

XSS pačioj paprasčiausioj formoj, t.y.

<b>$mano_tekstas</b>

Yra sprendžiamas keičiant specialiuosius HTML simbolius į atitinkamus entities, kad jie nebūtų laikomi html tagų dalimi, o tiesiog tekstu. T.y

>
keičiasi į
$gt;

Ir pan. Tam yra funkcija htmlspecialchars(). Normalios templeitų kalbos (t.y. templeitai, kurie nėra PHP kodas), gali turėti autoescapinimą, t.y., praleis pro tą funkciją kintamuosius patys.

 

Strip_tags() nėra geras sprendimas. Vieną dieną vartotojas tavo sukurtame forume norės papostinti HTML tagą tiesiog kaip tekstą - kas tada? :) Čia būtų tas pats, kas saugantis nuo SQL injekcijų šalinti visas kabutes. Kabutės juk reikalingos tekstui, ką? :)

 

Yra sudėtingesnių XSS atvejų (kai vartotojo inputas kišamas į html atributus, Javascript, ir pan.). Tada irgi reikia elgtis atitinkamai.

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...