Navigacija

Vartotojų tinkle

Prisijungusių svečių: 322
Prisijungusių narių: 0
Prisijungusių narių nėra

Registruoti nariai: 25,956
Naujausias narys: saulyzas

Naujausi straipsniai

Paskutiniai nariai

Reikalas12:57:54
MaFetas 2 savaitės
ozzWANTED 3 savaitės
saulyzas 5 savaitės
TOMIJUS 6 savaitės
Jaunelis22 savaitės
lanis22 savaitės
And2s23 savaitės
Memento Mori28 savaitės
Quwqkibor30 savaitės
asirija34 savaitės
tomeem36 savaitės
weberiz39 savaitės
mRokass42 savaitės
kartoonas43 savaitės
grunskiz46 savaitės
Bruksnys46 savaitės
illusion46 savaitės
ordo47 savaitės
Jurgaila48 savaitės

Informacija:


OS: Unknown
Naršyklė: Nežinoma
IP: 3.15.142.42
Naujienų: 529
Straipsnių: 235
Temų: 52,589
Postų: 522,538
Postų pask. parą: 1
Shout'ų pask. parą: 0
P.S.C. pask. parą: 1
Nuorodų kataloge: 13

Lankomumo Statistika

Peržiūrų šiandien: 22

Iš viso peržiūrų: 22948724

Prisijungti

REGISTRUOTIS
Nario vardas

Slaptažodis



Pamiršai slaptažodį?
Paprašyk naujo

Aktyvuoti save

Šaukykla

Jei norite rašyti žinutes, turite prisijungti.

ozzWANTED
2024 Lap. 30 15:11:14
Taip, vis dar up šypsosi

MaFetas
2024 Lap. 13 22:11:57
hey how, geras dar veikiantis saitas?

Jaunelis
2024 Lie. 25 11:07:43
Oho vis dar veikia svetainė akinanti šypsen Šimtas metų, matau Šaukykloje nuostalgija. Smagu panaršyt po forumą ir pažiūrėt senas temas šypsosi

And2s
2024 Lie. 17 19:07:04
2008 pirmą kart čia patekau, man buvo 10m ir čia pramokau programavimo.. smagu skaityti senas žinutes, tokia nostalgija akinanti šypsen ačiū Ozz kad saugoji šitą kultūrinį reliktą šypsosi

ozzWANTED
2024 Sau. 17 01:01:00
Desperatiškus komentarus šaukykloje su accountu po mėnesio prasibuvimo, ištryniau. Pasaulis ir taip juodas. Įjungiam šviesą, prašviesės. šypsosi

Šaukyklos archyvas

Apklausa

Ar esate patenkinti lietuviško vertimo kokybe?

Taip!

Taip, bet yra ką taisyti (parašysiu komentaruose)

Ne

Norėdamas balsuoti turite prisijungti.
Archyvas
Reklama 400x60
Apsauga nuo SQL Injection
Tarkim turime puslapį, kuriame yra tam tikra forma (pvz: registracijos, prisijungimo), kurioje įvesti duomenys tikrinami/įrašomi i SQL bazę (Kaip pavyzdį naudosiu prisijungimo formą). Vieno iš formos įvedimo laukelio vardas yra 'NAME', kuriame reikia įvesti prisijungimo vardą.
Taigi, tokio puslapio, kuris tikrina įvestus duomenis, SQL užklausa turėtų atrodyti daug maž taip:

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = '$NAME';

(PHP pvz: mysql_query("'SELECT name,pass,email FROM users WHERE name='$name'");)

Čia $NAME yra puslapio kintamasis, kuris sudarytas iš formoj įrašyto prisijungimo vardo (PHP pvz: $NAME = $_POST['NAME'];).
Tikslų laukelių ar 'stalo' pavadinimo mes nežinom, bet tai tam tikromis užklausomis ir spėliojimais galima juos sužinot.
Pamėginus į prisijungimo formą įvesti atsitiktinius vardą ir slaptažodį, mums turėtų parodyti klaidą apie neteisingą slaptažodį ar vartotojo vardą. Jeigu pamėgintume vietoje vartotojo vardo įvesti Vardas', tada SQL užklausa atrodytų taip:

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = 'Vardas'';

Tokia užklausą turėtų mums gražinti pranešimą apie sintaksės klaidą, kadangi užklausos pabaigoje yra dvi apostrofos. Jeigu tikrai gražino tokį pranešimą, reiškia puslapio informaciją nėra filtruojama ir puslapis pažeidžiamas, jei gražino kitokį pranešimą - puslapis saugus.

Dabar pasidarome užklausą kuri visada gražntų teigiamą reikšmę:

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = 'Vardas' OR 'x'='x';

Kadangi x visados bus lygu x, tai ir ši užklausa visada bus 'true'. Su tokia užklausa praeinamas tik vartotojo vardo patikrinimas, iš tiesų ką gražins puslapis neaišku, tai lieka pačiam išssiaiškint pamėginus. Tarkim kad sistema mums gražino pranešima kad netinkamas slaptažodis (Vartotojo vardas atitiko, kadangi užklausa visa gražins 'true' tai neturi reikšmės kas parašytas vardas)

Taigi turime tris pranešimų tipus:

1. Neteisingas vardas. (paprasta, teisinga SQL užklausa)
2. Neteisingasa slaptažodis. (kai vartotojo vardas apeitas)
2. Sintaksės klaida. (blogai suformuluota SQL užklausa)

Iki šiol yra nežinomi lakuų pavadinimai ir nėra funkcijos kurį juos parodytų. Tad dabar prasideda spėliojimas. Pirma pasidaroma užklausa, kuri mums parodys ar SQL užklausa teisinga ir leis atspėti laukelių pavadinimus.

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = 'x' AND email IS NULL; --';

Kadangi mums dabar vardas nerūpi, tai jis yra x. Čia 'email' yra spėjamo lauko pavadinimas. Jei gauname pranešimą kad SQL sintaksė bloga, vadinasi laukelio pavadinimas netoks, o jei gražina kad neteisingas vartotojas - vadinasi jau žinomas laukelio pavadinimas. Taigi taip atspėti galima ir kitus laukeliu pavadinimus.

Kadangi šis straipsins skirtas apsisaugoti nuo SQL Injection, tad nematau prasmės aiškint kaip viskas vyksta toliau, tik pateiksiu keletą pavyzdžių. Iš viso to jau turėtumete susidaryti bendrą vaizdą, kaip viskas vyksta.

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = 'x'; UPDATE users SET email = 'lauzinetojo@email.addr' WHERE user = 'admin' ';

SELECT laukeliu_pavadinimai
FROM table_pav
WHERE laukelio_pav = 'x'; DROP TABLE users; --';


Apsisaugojimas.

Nuo viso to galima apsisaugoti labai paprastai - naudojant tam tikras funkcijas, kurios neleidžia kartotis apostrofom.
PHP tam skirta funkcija yra mysql_escape_string(); - ši funkcija visas apostrofas pakeis į ', todėl šios apostrofos nebus skaitomos kaip užklausos sintaksės dalis.

Ʋinoma yra ir kitų būdų kaip apsisaugot. Pvz.: galima su Regular Expresions patikrint ir neleisti įvesti tokių simbolių kaip apostrofos, arba dar galima iš įvedamo teksto ištrinti tokius simbolius.


Straipsnio informacija

Autorius
N3PST3R
Parašymo data
2006 spalio 1 18:10:49
Komentarų
5
Skaityta
6069
Spausdinti Spausdinti
Komentarai
tadukas1 2008 gruodžio 10 22:12:40
kur sita koda reikia irasyti ?
drakonas34 2009 liepos 16 15:07:15
jo nežino
almantsas 2010 kovo 26 21:03:11
Kur reik rasyt mysql_escape_string(); ?
allenas. 2010 rugpjūčio 10 18:08:15
Visai neaiškus straipsnis. nežino
tevas 2010 rugpjūčio 19 21:08:00
visko norit padaryto jau
Rašyti komentarą
Prisijunkite, norėdami parašyti komentarą.
Reitingai
Balsuoti gali tik nariai.

Prašome prisijungti arba prisiregistruoti.

Nuostabu! Nuostabu! 0% [Nėra balsų]
Labai gerai Labai gerai 0% [Nėra balsų]
Gerai Gerai 0% [Nėra balsų]
Patenkinamai Patenkinamai 0% [Nėra balsų]
Blogai Blogai 100% [3 Balsų]