Navigacija

Vartotojų tinkle

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

Registruoti nariai: 25,952
Naujausias narys: tomeem

Naujausi straipsniai

Paskutiniai nariai

tomeem 2 dienos
Reikalas 1 savaitė
weberiz 3 savaitės
mRokass 6 savaitės
kartoonas 7 savaitės
iaescortsmap 7 savaitės
ozzWANTED 8 savaitės
grunskiz 9 savaitės
Bruksnys10 savaitės
illusion10 savaitės
ordo11 savaitės
Jurgaila12 savaitės
originalcs1612 savaitės
Rytis12 savaitės
halis14 savaitės
junkus17 savaitės
morlis17 savaitės
Majakas18 savaitės
andsoft19 savaitės
picolee9020 savaitės

Informacija:


OS: Unknown
Naršyklė: Nežinoma
IP: 3.15.202.4
Naujienų: 529
Straipsnių: 235
Temų: 52,584
Postų: 522,522
Postų pask. parą: 0
Shout'ų pask. parą: 0
P.S.C. pask. parą: 0
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 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

Majakas
2023 Gru. 10 19:12:39
Negaliu patikėti jog žinutės/pranešimai visi yra nuo 2008 m akinanti šypsen

Žmogus
2023 Rugs. 7 21:09:14
O gal BloodKiller pasijungs?

Apocal
2023 Rugs. 2 18:09:23
Nu davai nuveikiam kažką akinanti šypsen. Prisijungti kada visi čia akinanti šypsen.

Apocal
2023 Rugs. 2 00:09:18
Šiaip atėjau pažiūrėti ar dar lopas nesby yra ar koks ten buvo.

Š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
6006
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ų]