ServerErr0r
uid=0(root)
- Katılım
- 12 Eyl 2009
- Mesajlar
- 2,330
- Reaction score
- 0
- Puanları
- 0
PHP Ve Güvenlik
Merhabalar arkadaşlar,bugün PHP programlama dilinde yazdığımız web yazılımlarının güvenliği üzerine ufak birkaç bilgi vermek istiyorum dilim döndüğünce...
Kurallar halinde sıralı olarak açıklama yapalım.
1 - Ziyaretçiden Gelen Bilgiye Asla Güvenmeyin !
Evet arkadaşlar güvenmemeliyiz,bunu basit bir örnekle açıklayalım;
Şimdi sitemize üye olmak için bir formumuzun olduğunu düşünelim ve ziyaretçi bu bilgileri girip işlem yaparsa bilgiler veritabanına kaydedilmiş olur değil mi ? Evet.Şimdi birde diğer bir bakış açısıyla örneğimize bakalım; Ziyaretçi üyelik formunu bilgisayara kaydeder daha sonra herhangibi bir editör ile bu formu açar vebizim istediğimiz veriler yerine kendi zararlı kodlarını ekleyip veritabanına zarar verecek yada veri sızdıracaktır.Bundan sonrasında ise kendi hazırlamış olduğu zararlı sayfayı kullanır veritabanına gönderir işte burası önemli kısım,eğer biz bu gelen verileri kontrol etmeden veritabanına eklersek büyük zararlar doğabilir.Buna dikkat etmeliyiz.
Kontrol etmeye örnek olarak; Eğer biz ziyaretçiden sayısal değer istiyorsak bunun sayı olup olmadığını kontrol etmeliyiz.
2 - Gereksiz Hatalaları Ziyaretçiye Göstermeyin !
Evet her oluşan hatayı ziyaretçinin görmesi hem anlamsız hem risklidir.Neden anlamsız ? Çünkü ziyeretçinin bu hata ile bir işi olamaz yapacağını yapar ve çıkar gider.Neden riskli ? Örneğin yazılımımızın veritabanı ile bağlantı kurmaya çalıştığını düşünelim ve bağlantı başarısız olunca ekrana tuhaf bir hata alındığını varsayalım -ki böyledir de zaten- bu hatanın için de bizim bazı bilgilerimiz açığa çıkar örneğin veritabanı adı yada veritabanı kllanıcı adı yada başka bir veri...
Evet bunlar normal bir ziyaretçi için pek bir anlam ifade etmiyor doğru ama bir bilgisayar korsanı / cambazı için çok önemli olabilir.Bu bilgileri veritabanına saldırıda kullanabilir.Yani bu yüzden örneği bazı belirli işlemlerin başarısız olma durumunda -örneğin veritabanı bağlantısı- direk hatayı yazdırmak yerine "Bir sorun oluştu,lütfen daha sonra tekrar deneyiniz." gibi ziyeretçinin anlıyacağı dilden ve hiçbir gizli verinin dışarıya sızmamasını sağlayabiliriz.
3 - " Mysql_real_escape_string "Kullanın !
Veritabanına SQL dili ile sorgu gönderirken " Mysql_real_escape_string " kullanmanız yararınıza olacaktır.Bu sayede veritabanınızı zararlı sorgulardan korumuz olursunuz.
4 - Upload"lara Dikkat Edin !
Evet sitemize yapılan yüklemelerde gerekli kontrolleri yapmassak kötü sonuçlar doğabilir,örneğin biz sadece resim yükleme amaçlı upload edilmesini istiyoruz ziyaretçiler tarafından ama ziyaretçimiz kötü niyetli ise bizim sitemizde de resim yükle denilip kontroller yapılmadan kabul ediliyorsa dosyalar kötü niyetli ziyaretçi resim dosyasıymış gibi kandırıp bir shell (listpatch) yükleyerek siteye hatta perm. (izinler) dahilinde komple sunucuyu / server"ı ele geçirebilir.
5 - Command Enjection Attack "larına Karşı Tedbirinizi Alın !
SQL İnjection,XSS İnjection vb. komut enjekte saldırılarına karşı tedbirli olun bunların yazılımınızda olup olmadığının kontrolünü yapın var ise nasıl kapatılacağını araştırıp uygulayın.
6 - Cookie"leri şifreleyin !
Cookie"ler bildiğiniz gibi sitelerin ziyaretçileri tanımlamaları ve takip etmeleri için kullanılırlar.Örneğin bir siteye giren ziyaretçinin admin panelinden giriş yaptığını düşünelim -yani bu kişi admin oluyor.-
Bundan sonra ise site admin"i tanımlamak için onun bilgisayarına bir dosya bırakıyor -şifresiz olarak düz metin halinde !-. -Geldik can alıcı noktaya- Eğer kötü niyetli birisi bu kişinin cookie"sini almayı başarırsa kendi cookie"leri ile değiştirip kendini siteye admin olarak tanıtır ve devamını biliyorsunuz...
Bu sebepten ötürü cookie"lerin düz metin halinde tutulması güvenli değildir MD5 gibi bir şifreleme algoritması ile şifreleyip saklamak daha güvenli olur.
Ama ben bu tür tanımlama işlemleri için cookie yerine "session" kullanılmasını öneriyorum.
7 - Log Yönetimi Yapın !
Sitenizde kim ne yapıyor,kimin amacı,kim anormal bir durumda bunları log dosyalarından tespit edebiliriz.Biraz daha fazla kod yazarız ama emin olun bu çok faydalı olucaktır.
8 - Herşeyi PHP"den Beklemeyin !
Evet herşeyi PHP"den beklemek yanlıştır.Bu olayın veritabanı,web sunucu ve işletim sistemi tarafı da vardır.İlla web yazılımımızda açık olucak diye bir şey yok.Bizim yazılımımızda açık olmaz bulunduğumuz sunucuda ki diğer sitelerden birinde açık olur yine hack edilir sitemiz...
Evet yazımızın sonuna geldik umarım faydalı olmuştur.
Bunlar sadece temel önlemler daha ayrıntılı bilgi için google"a başvurabilirsiniz.
Merhabalar arkadaşlar,bugün PHP programlama dilinde yazdığımız web yazılımlarının güvenliği üzerine ufak birkaç bilgi vermek istiyorum dilim döndüğünce...
Kurallar halinde sıralı olarak açıklama yapalım.
1 - Ziyaretçiden Gelen Bilgiye Asla Güvenmeyin !
Evet arkadaşlar güvenmemeliyiz,bunu basit bir örnekle açıklayalım;
Şimdi sitemize üye olmak için bir formumuzun olduğunu düşünelim ve ziyaretçi bu bilgileri girip işlem yaparsa bilgiler veritabanına kaydedilmiş olur değil mi ? Evet.Şimdi birde diğer bir bakış açısıyla örneğimize bakalım; Ziyaretçi üyelik formunu bilgisayara kaydeder daha sonra herhangibi bir editör ile bu formu açar vebizim istediğimiz veriler yerine kendi zararlı kodlarını ekleyip veritabanına zarar verecek yada veri sızdıracaktır.Bundan sonrasında ise kendi hazırlamış olduğu zararlı sayfayı kullanır veritabanına gönderir işte burası önemli kısım,eğer biz bu gelen verileri kontrol etmeden veritabanına eklersek büyük zararlar doğabilir.Buna dikkat etmeliyiz.
Kontrol etmeye örnek olarak; Eğer biz ziyaretçiden sayısal değer istiyorsak bunun sayı olup olmadığını kontrol etmeliyiz.
2 - Gereksiz Hatalaları Ziyaretçiye Göstermeyin !
Evet her oluşan hatayı ziyaretçinin görmesi hem anlamsız hem risklidir.Neden anlamsız ? Çünkü ziyeretçinin bu hata ile bir işi olamaz yapacağını yapar ve çıkar gider.Neden riskli ? Örneğin yazılımımızın veritabanı ile bağlantı kurmaya çalıştığını düşünelim ve bağlantı başarısız olunca ekrana tuhaf bir hata alındığını varsayalım -ki böyledir de zaten- bu hatanın için de bizim bazı bilgilerimiz açığa çıkar örneğin veritabanı adı yada veritabanı kllanıcı adı yada başka bir veri...
Evet bunlar normal bir ziyaretçi için pek bir anlam ifade etmiyor doğru ama bir bilgisayar korsanı / cambazı için çok önemli olabilir.Bu bilgileri veritabanına saldırıda kullanabilir.Yani bu yüzden örneği bazı belirli işlemlerin başarısız olma durumunda -örneğin veritabanı bağlantısı- direk hatayı yazdırmak yerine "Bir sorun oluştu,lütfen daha sonra tekrar deneyiniz." gibi ziyeretçinin anlıyacağı dilden ve hiçbir gizli verinin dışarıya sızmamasını sağlayabiliriz.
3 - " Mysql_real_escape_string "Kullanın !
Veritabanına SQL dili ile sorgu gönderirken " Mysql_real_escape_string " kullanmanız yararınıza olacaktır.Bu sayede veritabanınızı zararlı sorgulardan korumuz olursunuz.
4 - Upload"lara Dikkat Edin !
Evet sitemize yapılan yüklemelerde gerekli kontrolleri yapmassak kötü sonuçlar doğabilir,örneğin biz sadece resim yükleme amaçlı upload edilmesini istiyoruz ziyaretçiler tarafından ama ziyaretçimiz kötü niyetli ise bizim sitemizde de resim yükle denilip kontroller yapılmadan kabul ediliyorsa dosyalar kötü niyetli ziyaretçi resim dosyasıymış gibi kandırıp bir shell (listpatch) yükleyerek siteye hatta perm. (izinler) dahilinde komple sunucuyu / server"ı ele geçirebilir.
5 - Command Enjection Attack "larına Karşı Tedbirinizi Alın !
SQL İnjection,XSS İnjection vb. komut enjekte saldırılarına karşı tedbirli olun bunların yazılımınızda olup olmadığının kontrolünü yapın var ise nasıl kapatılacağını araştırıp uygulayın.
6 - Cookie"leri şifreleyin !
Cookie"ler bildiğiniz gibi sitelerin ziyaretçileri tanımlamaları ve takip etmeleri için kullanılırlar.Örneğin bir siteye giren ziyaretçinin admin panelinden giriş yaptığını düşünelim -yani bu kişi admin oluyor.-
Bundan sonra ise site admin"i tanımlamak için onun bilgisayarına bir dosya bırakıyor -şifresiz olarak düz metin halinde !-. -Geldik can alıcı noktaya- Eğer kötü niyetli birisi bu kişinin cookie"sini almayı başarırsa kendi cookie"leri ile değiştirip kendini siteye admin olarak tanıtır ve devamını biliyorsunuz...
Bu sebepten ötürü cookie"lerin düz metin halinde tutulması güvenli değildir MD5 gibi bir şifreleme algoritması ile şifreleyip saklamak daha güvenli olur.
Ama ben bu tür tanımlama işlemleri için cookie yerine "session" kullanılmasını öneriyorum.
7 - Log Yönetimi Yapın !
Sitenizde kim ne yapıyor,kimin amacı,kim anormal bir durumda bunları log dosyalarından tespit edebiliriz.Biraz daha fazla kod yazarız ama emin olun bu çok faydalı olucaktır.
8 - Herşeyi PHP"den Beklemeyin !
Evet herşeyi PHP"den beklemek yanlıştır.Bu olayın veritabanı,web sunucu ve işletim sistemi tarafı da vardır.İlla web yazılımımızda açık olucak diye bir şey yok.Bizim yazılımımızda açık olmaz bulunduğumuz sunucuda ki diğer sitelerden birinde açık olur yine hack edilir sitemiz...
Evet yazımızın sonuna geldik umarım faydalı olmuştur.
Bunlar sadece temel önlemler daha ayrıntılı bilgi için google"a başvurabilirsiniz.