Bok svima, ovako jedan lik me hakirao na mysqlu sa slq injectiom preko foruma ili reg stranice zna li tko kako da zaustavim injectije??
hvala
Kako zaustavit SQL INJECTION?[Pomoc potrebna]
- poruka: 8
- |
- čitano: 2.873
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
pa moras pripaziti da filtriras unos sa formi, querya ili slicno...
npr imas link neznam
index.php?id=5
i sad kada ti ides postaviti upit u mySQL on bi isao nekako ovako
SELECT * FROM TABLE WHERE ID=$ID
u ovom slucaju id=5 pa bi query izgledao:
SELECT * FROM TABLE WHERE ID=5
a sta ako ja pozovem taj tvoj file ovako:
index.php?id=5;DROP%20TABLE%20users;
tvoj query bi u tom slucaju izgledao ovako:
SELECT * FROM TABLE WHERE ID=5; DROP TABLE users
dakle mogu izvrsit dva razlicita SQL upita, onaj koji selektira i onaj koji ti brise tabelu...
dakle, povezuj podatke ID-evima, napravi funkciju koja ce od query-a izvlaciti samo brojeve, kod submitanja formi filtriraj znakove ' / -- ; i ostalo...
Proguglaj... imas masu toga o sql injectionu...
Znam u googlu sta pise al neznam kak to napravit....btw kad promjenim forum i sve stranice dali napadac moze svjdno uc ili mora opet injectat?(mislim dali on svaki put da bi otkrio svoj username i password mora injectati ponovo ili moze uc sam ovak?)
Ahaaaa... u tome je problem...
znaci kada taj tvoj lik ode na forum i mora se prijaviti sa userom i pwd
onda bi sql upit isao SELECT * FROM User where ime='nekoime' AND pwd = 'nekipwd'
dakle on preko forme salje 2 varijable... ajmo ih nazvat $ime i $pwd...
e sad... ako on umjesto tog nekog usera u polje username upise ante' OR 1=1-- njega ce pustit u taj tvoj formum... zasto?
jer sada SQL upit izgleda ovako
SELECT * FROM User where ime='ante' OR 1=1-- AND pwd = 'nekipwd'
primjecujes ova dva "--" na kraju... to znaci da se sve iza toga smatra kao komentar, dakle taj tvoj haker je na fini nacin preskocio provjeru passworda...
a ovaj dio
ime = 'ante' OR 1=1
covjek se nemora uopce zvati ante... zasto
ime = 'ante" neistina
1=1 istina
istina OR (logicko ili) neistina = istina dakle u redu je...
Ako si ti programirao forum pokusaj sa strored procedure:
SELECT STRCMP(username, $username) AND STRCMP(pwd,$pwd) FROM Korisnik
e sad ovaj query radi to da usporedjuje polje u bazi username sa varijablom $username kao i sa passwordom
vraca ti 1 u koliko postoji takav user, u koliko ne... nisam siguran 0 ili -1
Sorri na sintaksi ako je kriva, pisem ovo iz glave... u svakom slucaju ideju imas...
Ako nisi ti pisao forum makni taj forum i skini neki drugi tipa phpBB ili nesto
ustvari skuzio sam nehakira mi u forum injectiom nego u register site sad cu ga zamjenit potpuno drugacijim pa cemo vidjet oce li mi hakirati.
uspjeh nemoze mi hakirat kodove =)
ja sam u bazu spremio kriptirani username i pass...tako da upit provjerava...kriptirane stringove
Tako je... treba ih spremati u npr SHA1... i onda kompariras data u bazi i kriptirani unos sa forme... fina zastita...