Topic: sql injekcijos

Ar kas gali paaiskinti kaip jos yra daromos, per kur daromos/vedamos ir pan.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

Re: sql injekcijos

Per kur daromos/vedamos:

Per visur kur tik imanoma ivesti vartotojui kazkokia info ir ta info apdorojama/kisama i mysql.

Kaip jos daromos:

Injection - iskiepis. Vadinas bandoma iterpti/iskiepyti vartotojo norima uzklausa i jau esama kode mysql uzklausa.

Re: sql injekcijos

Min2liz wrote:

Per kur daromos/vedamos:

Per visur kur tik imanoma ivesti vartotojui kazkokia info ir ta info apdorojama/kisama i mysql.

Kaip jos daromos:

Injection - iskiepis. Vadinas bandoma iterpti/iskiepyti vartotojo norima uzklausa i jau esama kode mysql uzklausa.

Prisiiskaiciu daug visokiu pvz bet niekas nevikia ant mano saito ta prasme gal ir gerai bet norisi isitikinti ar mano svetaine saugi.. :)

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: sql injekcijos

Siaip pats pakuriai koki tai webuka su inputu, be jokiu apsaugu, ir iterpinejant

';-- Drop table users;

ar panasiai, nesuveikia )

Re: sql injekcijos

JuliusGr wrote:

Siaip pats pakuriai koki tai webuka su inputu, be jokiu apsaugu, ir iterpinejant

';-- Drop table users;

ar panasiai, nesuveikia )

Duok webuko adresą, patikrinsim. Tai ką tu tikrini yra daug šansų ir priežaščių, kodėl neveikia:
a) dažniausiai nepalaikoma multi-query;
b) kartais nera drop teisių;
c) ...

Re: sql injekcijos

Naudojant PDO injekcijų galima 100% išvengti?

Re: sql injekcijos

Mantas LT wrote:

Naudojant PDO injekcijų galima 100% išvengti?

Na reikia teisingai naudoti, bet 100% apsauga yra nevartotinas terminas jei ką:)
PDO palaiko multiquery, dėl to lengviau injekcija padaryti (kai PDO neteisingai naudojamas).

No warning? No action? I hate this situation!

Re: sql injekcijos

Taip viskas priklauso nuo to, kaip naudosi. Neteisingai naudojant jokio skirtumo ar PDO ar ne - bus SQL injekcija ir viskas.

Re: sql injekcijos

minde wrote:

Taip viskas priklauso nuo to, kaip naudosi. Neteisingai naudojant jokio skirtumo ar PDO ar ne - bus SQL injekcija ir viskas.

Tarkim visos užklausos, kurios dirba su vartotojo duomenimis (GET, POST ir pan.) naudoja PDOStatement. Dalis duomenų perduodama tiesiai, be jokio apdorojimo. Ar tokia sistema yra 99,99% apsaugota nuo injekcijų?

Re: sql injekcijos

Jeigu visur naudoji parametrus ir tiesiogiai niekur neklijuoji jokių (ypač vartotojo) reiškmių, tai tada taip - būsi 99,99% apsaugotas.

100% nėra, nes egzistuoja 2-o lygio SQL injectionai ir galimi draiverio bug'ai ir/arba dar kitos situacijos, bet jos jau labai retos ir/arba labai sunkiai eksplotuojamos, todėl galima sakyti kad esi saugus.

Re: sql injekcijos

minde wrote:
JuliusGr wrote:

Siaip pats pakuriai koki tai webuka su inputu, be jokiu apsaugu, ir iterpinejant

';-- Drop table users;

ar panasiai, nesuveikia )

Duok webuko adresą, patikrinsim. Tai ką tu tikrini yra daug šansų ir priežaščių, kodėl neveikia:
a) dažniausiai nepalaikoma multi-query;
b) kartais nera drop teisių;
c) ...

čia ant localhosto. Kiek girdėjau nuogirdų, tai atseit net neina iš localhosto indžektint. Bet nesigilinau į šitas nuogirdas.
Anyway, gal nesuveikia ir dėl to, kad sql užklausai jau paduodu '$kintamaji', o ne '$_POST['laukelis']'..?
O kas liečia pačią db, tai prisijunginėju kaip root'eris, ir jam viskas leidžiama. :)

Re: sql injekcijos

JuliusGr wrote:

čia ant localhosto.

localhost - releatyvus dalykas. Kiekvienam serveriui savo puslpiai yra localhost'e (-;
Gali būt serveris/tinklas taip sukonfigūruotas, kad kažkas iš interneto/lan'o gali prieiti prie tavo scripto/programos ir užvalgyti tavo kompą.
Beto, neplanuoji scripto/programos niekur kitur paleist?

JuliusGr wrote:

Kiek girdėjau nuogirdų, tai atseit net neina iš localhosto indžektint

Reikia remtis faktais, o ne nuogirdom. Viskas priklauso nuo konfigūracijos..

JuliusGr wrote:

Anyway, gal nesuveikia ir dėl to, kad sql užklausai jau paduodu '$kintamaji', o ne '$_POST['laukelis']'..?

Ne. Ne dėlto, o dėl mano paminėtų priežaščių. Jeigu pas tave yra $kintamasis = $_POST['kintamasis']; tai čia nėra nieko tikrinama...

JuliusGr wrote:

O kas liečia pačią db, tai prisijunginėju kaip root'eris, ir jam viskas leidžiama. :)

Dtandartiškai nuo vartotojo nepriklauso, ar leidžiamos multi-užklausos ar ne. Priklauso nuo SQL užklausų funkcijų/nustatymų, kuriuos naudoji.

Re: sql injekcijos

Kilo ka tik man mintis ir ar tai veiktu ir ar tai pasiteisintu?
db pavadinimas, lenteliu pavadinimai ir eiluciu pavadinimai gal net patys duomenys butu sifruojami per md5 t.y. tarkim lenteles pavadnimimas yra md5 kodas o kai ji naudoja php uzklausoje jis igauna duota kazkoki tekstini pavadinima.?..

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: sql injekcijos

skuelas wrote:

Kilo ka tik man mintis ir ar tai veiktu ir ar tai pasiteisintu?
db pavadinimas, lenteliu pavadinimai ir eiluciu pavadinimai gal net patys duomenys butu sifruojami per md5 t.y. tarkim lenteles pavadnimimas yra md5 kodas o kai ji naudoja php uzklausoje jis igauna duota kazkoki tekstini pavadinima.?..

Kažkokia nesamonė. MD5 - vienkryptis algoritmas.

Ir kokiu tikslu kažką šifruoti? Jeigu tinklapis blogai suprogramuotas, tai reikia taisyti tas klaidas/spragas, o ne kažką kitoje vietoje šifruoti.

15 (edited by skuelas 2011-04-17 18:19:22)

Re: sql injekcijos

minde wrote:
skuelas wrote:

Kilo ka tik man mintis ir ar tai veiktu ir ar tai pasiteisintu?
db pavadinimas, lenteliu pavadinimai ir eiluciu pavadinimai gal net patys duomenys butu sifruojami per md5 t.y. tarkim lenteles pavadnimimas yra md5 kodas o kai ji naudoja php uzklausoje jis igauna duota kazkoki tekstini pavadinima.?..

Kažkokia nesamonė. MD5 - vienkryptis algoritmas.

Ir kokiu tikslu kažką šifruoti? Jeigu tinklapis blogai suprogramuotas, tai reikia taisyti tas klaidas/spragas, o ne kažką kitoje vietoje šifruoti.

Nu nezinau :) galvoju kaip padaryti saugesnia svetaine...

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

16

Re: sql injekcijos

Kol tu galvoji kaip apsaugoti svetainę, tai siūlau pradžiai pasirūpinti backup;ais.
Visvien, jeigu kažkas tave darys, tai bent jau duomenis turėsi :)

Kiek maigyklių sudėvėjai ?

Re: sql injekcijos

md5 wrote:

Kol tu galvoji kaip apsaugoti svetainę, tai siūlau pradžiai pasirūpinti backup;ais.
Visvien, jeigu kažkas tave darys, tai bent jau duomenis turėsi :)

backupai daromi kas 24 valandas :)

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: sql injekcijos

O jei padaryciau tarkim su define uzklausas ar tai nereikstu kad uzklausu neis keisti ir jais manipuliuoti?

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: sql injekcijos

skuelas wrote:

O jei padaryciau tarkim su define uzklausas ar tai nereikstu kad uzklausu neis keisti ir jais manipuliuoti?

Bijai vilko - neik į mišką.
Tai gal dar pradėk definint visas php f-jas? :D
Kaži kiek laiko užims query'ių define'nimas ir kiek laiko užims:

$esacpe = mysql_real_escape_string($_POST['input']);

Aišku, galima prisigalvot ir prisirašyt, bet nepamiršk, kad kai pats rašysi kodą ir parašius klaidingą užklausą pradės tavo app spjaudytis error'ais.
O ir aplamai jau čia reiktų klasę rašytis, jeigu nurauki, kaip reikės pačio darytas klaidas debuginti - rašykis, nepakenks.. :)
Kita vertus kam išradinėti dviratį..
Jau geriau imi framework'ą, naudoji form_validation helper'ius ir nematai problemų.

Re: sql injekcijos

skuelas wrote:

O jei padaryciau tarkim su define uzklausas ar tai nereikstu kad uzklausu neis keisti ir jais manipuliuoti?

Jeigu užklausa neteisinga ir yra galimybe modifikuoti parametrus, tai jokio skirtumo ar ji define'inta ar ne, nes ne pati užklausa yra keičiama, o jos parametrai.