[phpBB Debug] PHP Warning: in file [ROOT]/viewtopic.php on line 22: include(./includes/bbcode.php): failed to open stream: No such file or directory
[phpBB Debug] PHP Warning: in file [ROOT]/viewtopic.php on line 22: include(./includes/bbcode.php): failed to open stream: No such file or directory
[phpBB Debug] PHP Warning: in file [ROOT]/viewtopic.php on line 22: include(): Failed opening './includes/bbcode.php' for inclusion (include_path='.:/opt/plesk/php/7.4/share/pear')
Straipsniai.lt •SQL-injekcija
Puslapis 11

SQL-injekcija

Parašytas: 2006 04 02 20:46
brain5ide
Kuomet nuskenavus serverį pamatote, kad čia veikia tik vienas servisas - Web serveris, jums nelieka jokios kitos išeities, kaip tik pulti Web programas(skriptus). SQL injekcija yra vienas iš atakų prieš web skriptus būdų.

SQL(Sturctured Query Language) - tai viena iš populiariausių(jeigu ne pati populiariausia) duomenų bazių valdymo sistemų kalba. Na o pati populiariausia duomenų bazių valdymo sistema yra mysql.

SQL injekcijos pažeidžiamumas gana yra gana dažnas web skriptinimo kalbose(PHP,CGI,ASP). Jis įvyksta dėl neteisingo įvedamų duomenų apdorojimo.
Sakykime turime vartotojas.php skriptą:

Kodas: Pasirinkti visus

<?php
// kazkur vykdomas prisijungimas prie duomenų bazės
$id = $_GET['id'];
$query = "SELECT * FROM vartotojai WHERE id = '$id'";
$rez = mysql_query($query);
// isvedami rezultato duomenys
?>
Taigi išvkietę skriptą: vartotjas.php?id=1 gausime varotojo su id = 1 duomenis, nes skriptas per get(arba post) gautą kintamąjį įstatys į SQL užklausą ir ji atrodys šitaip:

Kodas: Pasirinkti visus

"SELECT * FROM vartotojai WHERE id ='1'";
Pabandykime pakeisti skriptui perduodamą parametrą 1 į "1' or 1=1";--" :

Kodas: Pasirinkti visus

vartotojai.php?id=1' or 1=1";--
Mūsų skriptas šiuos duomenis įkels į SQL užklausą:

Kodas: Pasirinkti visus

"SELECT * FROM vartotojai WHERE id ='1' or 1=1";--'"
Ši užklausa išrinks visus įrašus kurių id bus 1 arba 1=1. Taigi bus išrinkti visi įrašai.
Mūsų kintamąjame po pirmojo skaičiaus 1 padėta vienguba kabutė SQL užklausoje virsta kabute, pabaigiančia argumentą(1), o toliau sekanti dalis virsta SQL užklausa. Po išsireiškimo 1=1 einančios dvigubos kabutės skripte pavirsta užklausos baigimo simboliu(PHP kalboje duomenų eilutės ribojamos dvigubomis kabutėmis). Po jų einantis kabliataškis virsta sakinio baigimo simboliu(pagal PHP sintaksę). Na o pabaigoje einantys du -- simboliai, nurodo(pagal SQL), kad viskas, kas toje pačioje eilutėje eina po jų, yra komentaras ir tai reikia ignoruoti. Taip ignoruojami skripte parašyti simboliai ir išvengiama sintaksės klaidos. Taigi tokia mūsų suformuluota užklausa perduodama SQL serveriui grąžina visus lentelės įrašus.

Pastaba:Šis dalykas veikia tik tokiame web serveryje, kuriame išjungtas kabučių filtravimas. Apache web serveriui tai būtų nustatymas "gpc_magic_quotes=off" php.ini faile.

Parašytas: 2006 04 24 17:41
Ramex
Pastaba:Šis dalykas veikia tik tokiame web serveryje, kuriame išjungtas kabučių filtravimas. Apache web serveriui tai būtų nustatymas "gpc_magic_quotes=off" php.ini faile. Šis nustatymas gana dažnai būna nustatytas, kadangi magic quotes įjungimas duoda kitų spragų.
butu gerai argumentu ir tiksliu pvz...

Parašytas: 2006 04 24 18:16
brain5ide
Argumentų? Na kai gpc_magic_quotes yra įjungtas PHP perfiltruoja visą įvedamą tekstą ir viengubas( ' ) ar dvigubas( " ) kabutes pakeičia į \' arba \". Atvaizduojant tekstą jokių pakitimų nebūna, taičiau kintamuosiuose tai apsaugo nuo neteisingo kabučių apdorojimo ir tuo pačiu nuo SQL injekcijos.

sql injection

Parašytas: 2006 04 24 20:01
Ramex
sita tai as zinau, taciau as konkreciau norejau butent apie tai
Šis nustatymas gana dažnai būna nustatytas, kadangi magic quotes įjungimas duoda kitų spragų.

Parašytas: 2006 10 09 16:52
dr dree
ir kur ta koda rasyt? :oops:

Parašytas: 2006 10 09 21:06
brain5ide
į visus įmanomus laukelius. Šiaip prieš imantis kokios nors laužimo srities siųlau susipažinti su veikla toje srityje, šiuo atveju web puslapių kūrimu.

Parašytas: 2006 12 21 19:25
Lordcraft
tai kaip cia bus jai webas yra su php.ini?
http://webas.lt/vartotojai.php?id=1/' or 1=1/";--

taip?