THT DUYURU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

chat
Seçenekler

Sql Açığı Kapatma ( Geniş Anlatım )

qwer954 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2016
Nereden:
Bilinmez
Mesajlar:
3.856
Konular:
580
Teşekkür (Etti):
666
Teşekkür (Aldı):
737
Ticaret:
(0) %
27-04-2016 15:49
#1
Sql Açığı Kapatma ( Geniş Anlatım )


Nasıl Kapatılır ?

servar da magic_quotes aktif değilse şayet tırnak problemleri yaşamanız veya sql injectiona maruz kalmanız olası,

sunucu size ait ise php.ini de magic_quotes = değerinin on olmasına dikkat edin, bunun haricinde sayfalarınızın kodlaması utf-8 ve addslashes() fonskiyonundan geçirmeniz durumunda sql injectiona maruz kalmazsınız,

sql injection $_GET ve $_POST ile html den alınan verinin mysql motoruna gönderilirken karakterlerin yanlış algılanması sonucu meydana gelir

addslashes() html den gelen operatör karakterleri ” veya ‘ başına \ koyarak sorgunun es geçmesini sağlar, eğer magic_quotes kapalı ise addslashes işlev görmez. bu nedenle her ne kadar fonksiyondan geçirirseniz geçirin sql injection yinede gerçekleşir. bunun akabinde yine sayfa kodlamanız utf-8 değilse ascii karakter olarak addslashes bypass edilebilir, sql injection yazılım operatörlerinin karakter setine göre alınıp işlenmesinden ibarettir, eğer siz bu veriyi işlerken bu karakterin query ye ait olmadığını anlatamazsanız query niz bozulur ve injection gerçekleşir. Burada asıl mesele ” ve ‘ süzülmesi olayıdır. query lerinizde where sutun=’$degisken’ şeklinde tırnak içersine almanız query nizin bozulmasını engeller,

aynı şekilde

where sutun=$degisken şeklinde kullanmanız query nizin bozulmasına neden olur, çünkü verinin baslangıc ve bitiş karakterleri yoktur.


Şöyle basit bir örnek verelim.

gelen verimizin Ahmet”in Ceketi olduğunu varsayalım

$degisken = $_GET['veri'];

"select * from tablo where sutun=$degisken"
1
2
3
$degisken = $_GET['veri'];

"select * from tablo where sutun=$degisken"
Veriyi değişken yerine koyduğunuzda

"select * from tablo where sutun=Ahmet"in Ceketi"
1
"select * from tablo where sutun=Ahmet"in Ceketi"
Şeklinde query de en baştaki ” ve en sondaki ” query aralığını belirtir, veride bir tane daha ” koyarsanız query orda biter yani where sutun=Ahmet” — devamı yok sayılır.
Ardından injection gerçekleşir. bunu şöyle yapsak

$degisken = addslashes($_GET[‘veri’]);

burada verimizin çıktısı,

Ahmet\”in Ceketi şeklinde olacaktır. addslashes veriden gelen ” karakterinin query e ait olmadığını ibare edecek yani karakteri es geçmesini (görmezden gelmesini) sağlayacak \ karakterini ekler,

şayet where sutun=’$degisken’ şeklinde kullanırsanız, query i dahada kısıtlamış olursunuz, mysql başlangıc berlireçleri yanı sıra, where sutun kısmında da bir kısıtlayıcı eklemiş olursunuz.




Alıntıdır.
qwer954 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2016
Nereden:
Bilinmez
Mesajlar:
3.856
Konular:
580
Teşekkür (Etti):
666
Teşekkür (Aldı):
737
Ticaret:
(0) %
27-04-2016 15:52
#2
Emeğe saygı

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler