Forumdan Son Konular
- Mybb.name.tr çalışma
- mybb sqL error 1054
- MyBB İçin Zararlı Olabilecek Bot, Spider ve Örümcekler Nelerdir?
- [Çözüldü] Forum Dizini Değiştirdim Panel Girişi Yapmıyor
- Google SEO (1.1.11) Hatası
- Çok acil Yardım
- Cracker-v2 MyBB Teması Satılıktır. Mükemmel Bakmadan Geçme
- siteme mybb kurdurmak istiyorum
- yedek kurdum ve uye girişinde sorun yaşıyorum
- Resim Doğrulama Sorunu
Son Yazılar
Kategoriler
Arşivler
Meta
Backlink Box
Etiketler
beleş forum
Google
indir
kubilay varlı
mntr
mntr paket
Mntr Premod
MyBB
mybb 1.4
mybb 1.4 tema
mybb 1.4.10
mybb 1.6
mybb 1.6 indir
mybb 2.0
mybb destek
mybbdestek
mybb eklenti
mybb eklentiler
mybb eklentileri
mybb forum
mybb gelişmiş editör
mybb geliştirme
mybb indir
mybb kur
mybb mods
mybb nedir
mybb paket
mybb plugin
mybb plugins
mybb seo
mybb skins
mybb son sürüm
mybb tema
mybb temaları
Mybb Tema ve Grafikler
mybb templates
mybb themes
mybb türkiye
mybb türkçe
mybb yükle
MyCode
plugin
tema
türkçe mybb
ücretsiz forum


PHP siteleriniz için SQL Injection Güvenliği
Web Sitelerinizde siteleriniz için yapılan saldırılar ve yöntemleri hakkında bilgilendirme sahibi olunursa sitelerinizi korumanında o denli anlamlı olacagını düsünüyorum ve acıklar ve koruma yollarını sizlerle paylasıyorum. Birçok veritabanı uygulamasında, özellikle SQL injektion sistemin zaaflarından faydalanarak sisteme girmenin yegane yollarından biridir.
Bu tip saldırılar genellikle, kullanıcıdan gelen verinin filtrelenmeden veya tipinin doğruluğu kontrol edilmeden sorguya sokulması sonucu oluşur. Her ne kadar son günlerde bu kullanıcı adları post ile sorgulansa da yine bu tip açıkları halt etmek ve de ulaşmak cok da zor olmamak da her ne kadar bu saldırıları önlemek kolay olsa da tespit etmek her webmaster için kolay değildir çünklü onlar daha ziya de işin tasarım yönüne odaklanır ve bu neden den dolayıdır ki bu güvenlik zafiyeti oluşur.Ş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 çok portalda sizlerinde bildiği üzere bir login girişi üyelik sistemi veya login sayfası düşünün, bu sayfada kodsal olarak incelediğimizde muhtemelen aşağıdaki gibi bir sorgu olacak.
Aslında her şey normal gibi görünüyor ancak şöylede bir durum var arkadaşlar kullanıcı adına ?uye=admin’/* girdiğinizi bir düşünün Sorgu şu hali alacak.
/* 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.
Zaten bu tarz uygulamalarda google amca bizim en büyük yardımcılarımızdan bir tanesidir desek pekde yalan olmaz
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. Şimdi bir çok yeni başlayan Sayın Arkadaşımlerimiz integer değerinin ne demek olduğunu soracaksınız ancak siz araştırmadan ben hemen size basitçe ne demek olduğunu açıklayayım bu deyim Sayısal tam sayı değerleri için kullanılılan bir değerdir sevgili arkadaşlar… ama siz bu tanım için tatmin olmadı iseniz o halde bu makale sizin için biraz ağır bir makale olacak biraz daha geriden gelmeniz gerekmektedir..
Neyse devam edelim biz ;
Herhangi üyenin detaylarını gösteren bir sayfa düşünün;
x.php?uyeid=1 ( Bu adres 1 no’lu uyenin bilgilerini gostersin )
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;
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:
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.
MyBBForumsitelerinizin ve diğer Php & MySQL ile kurmuş olduğunuz sitelerin SQL injeksion yöntemlerine karşı korunması için bunun gibi önlemler alabilir yardım ve destek için MyBB-Forumları Site Güvenliği Bölümünden Destek Alabilirsiniz.
Popularity: 2% [?]