ForumTayfa  

Go Back   ForumTayfa > Güvenlik & Bilgisayar & İnternet & Webmaster & Programlama Bölümü > Güvenlik & Bilgisayar & İnternet & Webmaster & Programlama > Programlama

Programlama Programlama hakkında herşeyi paylaştığımız, soru ve sorunlarımızı tartıştığımız bölüm...

Yeni Konu aç  Cevapla
 
LinkBack Seçenekler Stil
Alt 26.12.08, 00:00   #1 (permalink)
Acemi Tayfa
 
ShıFтdєLєтє - ait Kullanıcı Resmi (Avatar)
 
Üyelik Tarihi: Dec 2008
Nereden: Ankara/Batıkent
Mesaj Sayısı: 402
Konu Sayısı: 91
Takım: Fenerbahçe
Rep Gücü: 12706
Rep Puanı: 1269432
Rep Derecesi : ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000ShıFтdєLєтє 0-2000000
Ruh Hali:

Standart PHP Uygulamalarında SQL Injection Saldırıları




Veritabanı kullanılan uygulamalarda en büyük güvenlik sorunlarından biri SQL Injection saldırılarıdır. Bu tip saldırılar genellikle, kullanıcıdan gelen verinin filtrelenmeden veya tipinin doğruluğu kontrol edilmeden sorguya sokulması sonucu oluşur.

SQL Injection saldırılarını önlemek kolaydır, ama tespit etmek her programcı için kolay değildir.Şimdi perdenin arkasını açalım ve PHP& MySQL uygulamarında ne tür ataklar olabileceğini, nasıl önlem alabileceğimizi görelim...

Bir üyelik sistemi ve login sayfası düşünün, bu sayfada muhtemelen aşağıdaki gibi bir sorgu olacak.

SELECT uye, parola FROM uye where uye= '$_POST[uye]' and parola='$_POST[parola]'

Sistem işleyişi normal gibi görünüyor ama saldırganın tekinin kullanıcı adına ?uye=admin'/* girdiğini hayal edin.Sorgu şu hali alacak.

SELECT uye,parola FROM uye WHERE uye='admin'/* AND parola=''

/* karakteri mysql veritabanında yorum satırı başlangıcını ifade eder, dolayısıyla asıl sorgu, SELECT uye_parola FROM uye WHERE uye='admin' haline gelecektir.

Bu tür bir saldırıyı zararlı karakterleri escape(\) ederek durdurabilirsiniz.Bu işi PHP'de yapan hazır fonksiyonlar mevcut, örneğin addslashes(), ve mysql_real_escape_string().PHP manual'den bu fonksiyonların kullanımlarıyla ayrıntılı bilgi alabilirsiniz.

SQL Injection konusunda genelde dikkat edilmeyen bir diğer konu da kullanıcının normalde göndermesi gereken integer değerlerin (genelde ID) integer olup olmadığının kontrol edilmemesidir.

Herhangi üyenin detaylarını gösteren bir sayfa düşünün;

x.php?uyeid=1 (Bu adres 1 no'lu uyenin bilgilerini gostersin)

$id = mysql_real_escape_string($id);
$sorgu = "SELECT isim,soyad,bla,bla FROM uyeler WHERE id = $_GET[id]";

Eminim birçoğunuz zaten yukarıdaki kodun yeterince güvenli olduğunu düşünüyorsunuz fakat değil.Mysql 4.x ile birlikte mySQL union select destegi vermeye başladı.

Saldırganın tekinin ?id=-1 UNION SELECT 0,uye,parola FROM uye olarak istek yaptığını düşünsenize.. Birinci - asıl - select sorgusu herhangi bir sonuç döndürmeyeceği için dönen sonuclar saldırganın girdigi union select içindeki alanlar olacaktır.

Dikkatinizi çektiyse tırnak kullanmadan böyle bir saldırı yapılabiliyor, dolayısıyla bu nokta dikkat edilmesi gereken bu tip id tarzı bilgileri sorguya alırken veri tipini kontrol etmek.

Bunu (int)$degisken veya intval($degisken); seklinde yapabilirsiniz.Ya da is_integer, is_numeric gibi fonksiyonlarla kontrol edip gerekli manual try/catch mekanizmasını kurabilirsiniz.

Ya da bu tür değerleri tırnak içine alarak saldırganın işi zorlaştırılabilir.
(where id = '$id' gibi)
Zira, bu durumda saldırgan union select sorguları sokabilmek için ilk önce ilk SELECT sorgusunu bitirmek zorunda kalacak ve UNION SELECT yazmadan önce ' karakterini yazacak.Fakat mysql_real_escape_string burda devreye girip ' karakterini escape edeceği için olası saldırılar geçersiz hale gelir.

Yani daha güvenli bir kod aşağıdaki gibi olacak;
$id = intval($_GET["id"]);
$sorgu = "SELECT * FROM uyeler WHERE id = '$id' ";


SQL injection saldırıları bunlarla sınırlı değil, mysql'nin desteklediği INTO OUTFİLE ile SQL dumplarınız çalınabilir veya uzaktan php kodları çalıştırabilinir, load_file() fonksiyonu ile dosyalarınızın, konfigurasyon dosyalarınızın kaynak kodları okunabilir..

Bir diğer nokta da ; tarzı sorgunun bitip yeni sorgunun başladığını belirten veritabanı işaretçileri.mysql_query() bu tip çoklu(multiple) sorguları desteklemediği için sorun yok, ama SQLite veya PortreSQL ile çalışıyorsanız ; karakterine dikkat etmeniz gerekiyor.Zira x.php?id=1;DROP DATABASE uye gibi bir sorgu yazmak zor değil.

Kısaca yapılabilecekler mySQL'nin yapılabilecekleri ile sınırlı.

PHP programcısının bu konuda yapması gerekenler:

- Kullanıcıdan gelen veriyi salt halde sorguya sokmamak, gerekli filtremeleri mysql_real_escape_string() tarzı fonksiyonlarla yapmak

- Sayısal değerleri tırnak içine almak

- Magic_quotes'a güvenmemek ( magic_quotes nasıl olsa escape ediyor, benim bir şey yapmama gerek yok düşüncesi )

- mysql_error() çıktısını sadece geliştirme sürecinde debugging amacıyla kullanmak, zira olası bir sql hatasında ekrana mysql_error() çıktısı verirseniz saldırganın işini kolaylaştırmış olursunuz.

Bunların dışında PHP 5 ile gelen prepared statementlar sayesinde SQL injection saldırılarından kesin olarak kurturabilirsiniz.Zira bu özellik sayesinde, gelen veriler otomatik olarak sürücü tarafından işleme alınıp zararlı karakter temizleniyor, hatta veri tipini belirttiğiniz sürece type-casting bile yapabilirsiniz.


__________________

ShıFтdєLєтє isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
İsrail'in Gazze Şeridi'nde hava saldırıları: 3 ölü KuzenLiwe Dünya Gündemi 0 26.02.08 08:31
BM, Çad'daki saldırıları kınadı KuzenLiwe Dünya Gündemi 0 06.02.08 04:56
Gazze'ye füze saldırıları: 2 ölü KuzenLiwe Dünya Gündemi 0 17.01.08 08:06
PKK Saldırıları TSK’nın Komplosu mu?(Ali Atıf BİR) hepaestus Türkiye Gündemi 3 23.10.07 16:47
DOS saldırıları tekrar gündemde northerner Ağ ve İnternet 0 16.01.07 23:53


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 05:27.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.6.0
User Alert System provided by Advanced User Tagging v3.0.6 (Lite) - vBulletin Mods & Addons Copyright © 2020 DragonByte Technologies Ltd.
ForumTayfa

Arşiv: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 95 96 97 98 99 100 102 103 104 105 106 155 156 157 158 159 160 161 162 163 164 167 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271


ForumTayfa - Link Değişimi
Telinka İletişim | Voip Ürünleri | Link Değişimine Katılın |

Sitemiz bir forum sitesi olduğundan dolayı, kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir. ForumTayfa Yöneticileri mesajları itina ile kontrol etse de, bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Yine de sitemizde yasalara aykırı unsurlar bulursanız [email protected] email adresine bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.

Any member of our web site has the right of adding comments instantly without getting permisson due to the forum structure of our site basis. Althought, our site modarators check comments with care, all the responsibilities sourced from these comments directly belong to the members. If you still find any illegal content in our site ( A.buse, H.arassment, S.camming, H.acking, W.arez, C.rack, D.ivx, Mp.3 or any Illegal Activity ), please report us via [email protected] .Your reports will be evaluated as soon as the arrival of your e-mail.