Pereiti prie turinio

Rekomenduojami pranešimai

Na, pirmiausiai, dvi banaliausios ir galbūt dažniausiai daromos saugumo spragos: XSS ir SQL injekcija.

 

XSS - būtent tai, ką tu minėjai. Jei vartotojas į laukelį parašys <b>, tai supras kaip HTML tagą ir tekstą paryškins. Kad suprastų tuos simbolius kaip paprastą tekstą, < reikia pakeisti į <, > į >, na, dar & į & Tai ir yra html entities, tą ir daro htmlspecialchars(). Žinoma, galima įterpti ir pavojingesnių dalykų - pvz., Javascript, kuris gali daryt kone bet ką :)

 

Kad būtų aiškiau - http://siuksles.silke.in/xss.php - pabandyk įvesti teksto su HTML tagais.

 

SQL injekcija veikia labai panašiai - nefiltruojant vartotojo inputo, jis gali įterpti dalį savo SQL užklausos, pvz turime užklausą:

SELECT * FROM users WHERE username='$username'

$username įveda vartotojas, todėl jei jis įves, pvz.

' or 1=1 --

Užklausa gausis tokia:

SELECT * FROM users WHERE username='' or 1=1 --'

Ir bus ištraukiamas ne vienas vartotojas, o visi.

 

-- yra SQL komentaras, todėl viskas po jo yra ignoruojama (taip siekiama išvengti sintaksės klaidų, užkomentuojant likusią dalį programuotojo daromos užklausos.)

 

Nuo SQL injekcijos pats basic dalykas apsisaugoti - mysql_real_escape_string() (ar kitos duomenų bazės atitinkama funkcija). Taip pat jeigu naudoji CodeIgniter ActiveRecord metodus kreiptis į duomenų bazę, jie turėtų escape'inti patys.

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomus dalykas tas SQL. :) Taip, Codeigniter'yje naudoju ActiveRecord, nes tai yra saugesnės užklausos. ;)

 

Dar vienas klausimas, tai jei aš naudoju htmlentities(), tai jei vartotojas norės įvesti štai tokį kodą:

 

<b>TEST</b>

 

Tai jam tas "TEST" nepasiryškins? :) Ir jei nepasiryškins, tai bet kokius atvėju man to paryškinimo reikės, tai man jau minusas bus?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomus dalykas tas SQL. :) Taip, Codeigniter'yje naudoju ActiveRecord, nes tai yra saugesnės užklausos. ;)

 

Dar vienas klausimas, tai jei aš naudoju htmlentities(), tai jei vartotojas norės įvesti štai tokį kodą:

 

<b>TEST</b>

 

Tai jam tas "TEST" nepasiryškins? :) Ir jei nepasiryškins, tai bet kokius atvėju man to paryškinimo reikės, tai man jau minusas bus?

Jam nepasiryškins, naudojant htmlescapechars() ar htmlentities(). Tu vėliau galėsi paryškint pats, tam tai įtakos nedaro.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, tada logiškai mąstant escape'inimo, rodos, nereikėtų naudoti. Bet, kaip sakiau, galima įkišti ir blogesnių dalykų - <script> tagų ir pan. Filtruoti leidžiamus tagus - vienas dalykas, o kaip dar tagų atributai, pvz. į onclick atributą galima taip pat sėkmingai sukišt JavaScript. Manau geriausia būtų pasidaryti (ar pasiimti, tikrai rasi padarytų) BBkodo skriptuką ir lankoytojams būtent siūlyti rašyti BBkodu, o tu jau pas save pakeisi į atitinkamus tagus (dar tiesa, tokie kaip <b> ir <em> yra pasenę) ir tikrai žinosi, kad jokių negerų dalykų nėra įkišta. :)

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.

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