Kaip apsisaugoti nuo SQL injekcijų

SQL injekcijos yra vienas iš tinklapių nulaužimo būdų, ir, tiesą pasakius, vienas iš populiariausių. Pavyzdžiui, SQL užklausa atrodo taip: “SELECT * FROM users WHERE username = ‘” . $_POST['username'] . “‘”. Lyg ir nieko ypatingo, standartinis variantas. Tačiau, pažiūrėkime, kas bus, jeigu $_POST['username'] bus lygi “a’ or ’1′=’1″. Užklausa bet kuriuo atveju grąžins visus lentelės įrašus, ir didelė tikimybė, kad žmogus prisijungs prie tinklapio be jokių slaptažodžių. Kaip nuo to apsisaugoti? Skaitykite toliau.

Na, visų pirma, turėtumėte žinoti, kokios būna SQL injekcijos, tada nuo kiekvienos iš jų galima apsisaugoti. Tiesiog galima įrašyti į Google “sql injections” ir rasite begalę informacijos. Tačiau čia duosiu nuorodą į straipsnį, kuriame surinkta taip vadinama SQL Injection Cheat Sheet. Trumpai tariant, tai yra “špargalkė”, kurioje glaustai surašyta viskas, ką reikia žinoti apie SQL injekcijas. Pažymėti reikia tai, kad šiuo atveju tekstai orientuoti ne tik į MySQL, bet ir į kitas duomenų bazių sistemas: SQL Server, PostgreSQL, Oracle. Bet yra ir atskira skiltis “About MySQL and PHP”, kuri bus turbūt aktualiausia.

Štai kaip atrodo visas straipsnio turinys:

Pabaigai patarimas: jei tinklapį kursite iš požiūrio “kol veikia, tegul veikia”, tada patarčiau daryti duomenų atsargines kopijas kas kažkiek laiko, nes niekada negali žinoti, ar neateis tokia diena, kada kokia nors SQL injekcija arba dar kitas nulaužimo būdas pakeis jūsų tinklapio gyvenimą.

Dar kartą nuoroda: SQL Injection Cheat Sheet

* * *
Ar jau skaitėte mano naują el.knygą "Kaip kurti web-projektus"?
Joje išdėsčiau savo dešimties metų tinklalapių kūrimo, tobulinimo ir vystymo patirtį.
Knygą galite parsisiųsti skyrelyje "Knygos".

Komentarų: 7

    Blogorama #548 : nežinau.lt:
    March 18, 2009 12:57 pm

    [...] krautis sparčiau. • Renginių organizavimas su invite.lt pagalba – paprastas ir efektyvus. • Apsauga nuo SQL įterpimo nėra sudėtinga, bet reikalauja [...]

    Saulius:
    March 19, 2009 1:33 pm

    Pamiršai pasakyti KAIP nuo SQL injekcijų apsisaugoti :)

    primink apie addslashes, htmlspecialchars ir pan f-jas.

    galima net real-life pavyzdžių pateikt (kad ir su vienu iš elektroninių dienynų) :)

    Timerider:
    March 19, 2009 1:37 pm

    Na matai, nesinori kartoti to paties, kas labai gerai parašyta straipsnyje, į kurį yra nuoroda. Bet manau, kad parašysiu atskirą straipsnį SQL injekcijos pavyzdžių, bet kiek vėliau

    Experts:
    March 20, 2009 9:23 pm

    Už linką tai labai dėkui nemažai naudongo galima išskaityt aišku reikia norėti bet nedaug žmonių šiais laikais nori tai daryti :D

    :):
    March 23, 2009 11:53 am

    Apie prepared statement’us parašyt nepamiršk :)

    noname:
    December 31, 2010 7:14 am

    Niekada nevartokite viengubų kabučių ‘, tai labai blogai, naudokite dvigubas ” ir jūs visada būsite saugus, dar prieš kiekvieną funkciją naudokite @.

    Tokią užklausą galima nulaužti:
    $sql = mysql_query(“SELECT * FROM lentele where pass=’$slaptazodis’”);
    duomenis ištraukti galima vietoje $slaptazodis panaudojus ‘ or ’1′=’1

    Saugi:
    $sql = @mysql_query(“SELECT * FROM lentele where pass=\”$slaptazodis\”");

      mikriukas:
      December 7, 2011 9:26 pm

      ooo dekuj pagelbejot labai ;)

Parašykite komentarą


Powered by WordPress | Designed by: BlueHost Coupon | Compare CD Rates, Online Brokers and Press Release