PHP, MySQL ve Açık Kaynak


« Güvenli Bir Üyelik Sistemi İçin Temel İpuçları

Eğer kullanıcıların üye olarak bilgilerini paylaştığı bir ağ tabanlı sistem geliştiriyorsanız (Session,Cookie) ve bu bilgileri bir veritabanında saklıyorsanız; bu bilgiler kullanıcı ve sunucu arasında olduğundan dolayı araya 3. bir kişinin girmesine izin vermemek için kendinizden emin olana dek tüm güvenlik risklerini gözden geçirmeniz gereklidir.

Bunun başlangıç noktası projeye başlamadan önce küçük hataları önlemektir.Burada size anlatacağım konu PHP ile olduğu için kodlama yaparken nelere dikkat etmeniz ve bazı ipuçlarını öğrenmenizdir.

Aşağıda güvenlik ipuçları olarak verdiğim bilgiler projenizi geliştirirken dikkat etmenizi kesinlikle tavsiye ettiğim yöntemlerdir.

1-  Üye ismi ve şifresini 6 karakter veya daha uzun yapın.

2-  Oturum açma hatasında kullanıcıyı bilgilendirin.
Kullanıcı sisteme giriş yaparken eğer parolayı yanlış girmişse hata mesajı gösterin.Eğer tekrar yanlış parola ile girmeye çalışıyorsa üç yanlış denemeden sonra o kullanıcı adı ile girişi bir müddet yasaklayın ve şifremi unuttum bölümüne yönlendirerek şifrenin mail adresine gelmesini, geldikten sonra değiştirilmesini önerin.

3-  İşlemlerinizin başına @ hata bastırma simgesini yerleştirin.
Birçok PHP fonksiyonunun önünde @ simgesi yer alır.Eğer yapılması istenen işlem başarısız olursa @ simgesi hatanın ekranda gösterilmesini önleyecektir.En faydalı olduğu işlemlerin başında SQL ile veritabanında bir işlem yaptığınızda hatanın gösterilmesini engeller.Bu hataların engellenmesi ile SQL hatalarından kaynaklanan güvenlik açıklarınıda engellemiş oluruz.

4-  Kullanıcı parolalarını veritabanında şifreleyerek saklayın (MD5,CRYPT,SHA-1)
Eğer biri veritabanınıza erişim sağladıysa tüm kullanıcı bilgilerini ve parolalarını görebilir.Ama parolayı bir şifreleme yöntemi ile sakladığımızda kişinin parolayı öğrenmesini engelleriz.Şifreleme Metodları yazımda bu konu hakkında detaylı bilgi alabilirsiniz.

5-  Hiçbir zaman yönetici isminizi admin,root veya yönetici şeklinde yapmayın.
Herkesin bildiği ve çok kullanılan üye isimlerini kullanmanız risklidir.

6-  Kullanıcının sisteme giriş yaptığı son zamanı ve IP adresini saklayın.
Kullanıcının giriş yaptığı son zamanı saklayın ve IP adresini kaydedin.Ayrıca kullanıcı daha sonra giriş yaptığında son giriş zamanını ve ip adresini kullanıcıyada gösterin.

7-  Herhangi bir form alanı verisinden tehlikeli SQL,PHP,HTML komutlarını ve karakterleri temizleyin.
strip_tags() , str_replace() ve stripslashes() fonksiyonları ile bu komutları engelleyebilirsiniz.

8-  HTML form alanlarınızda “maxlenght” seçeneğini kullanın.
Eğer veritabanında saklayacağınız üye ismi veya parolanın maximum uzunluğunu 8 karakter olarak belirlemek isterseniz form alanınıza “maxlenght” seçeneğini eklemeniz gereklidir.Bu sayede uzun girişleri engelleyebilirsiniz.

Örnek: <input type=”text” name=”giris” size=”8″ maxlenght=”8″>

9-  $_REQUEST yerine $_POST kullanın.

10-  Son olarakta eğer önemli ve büyük bir projeyse SSL Sertifikası kullanın.
Daha yazılması gereken birçok şey var fakat tecrübe kazandıkça herşeyi öğreneceksiniz.Şu an için temel önlemleri öğrenmeniz diğer yöntemler için bir alt yapı taşıyacaktır.





11 Yorum


  • 08.Mart.2008
    emrah serdaroğlu yazdı

    e hadi devam harika yazılarınıza… bu kadar gecikmeli olmasın lütfen :) neredeyse ben bile PHP öğrenecem yazılarınız sayesinde…

  • 08.Mart.2008
    Güray Süerdem yazdı

    Zaman buldukça yazmaya çalışıyorum gecikmeleri önlemek içinde çok sıkı çalışıyorum (: neden kendinizi aşağıladınız phpyi elbette öğreneblirsiniz imkansız birşey gibi görmeyin :)

  • 11.Mart.2008
    emrah yazdı

    teşekkürler cevabınız için, ancak ben bile derken tasarım ile o kadar haşırneşirim ki maalesef arada bakıp birşeyler kapmaya çabalıyorum… işte anlatımlarınızın esas güzelliğide, arada bile bakılsa birşeyler anlamaya başlıyor insan :) bunun için ve özverili dikkatli çalışmanız içinde teşekkürler…

  • 02.Mayıs.2008
    huseyin yazdı

    emrah arkadasimiza katiliyorum yazilariniz gercekten anlasilir ve sade ozveriniz icin tesekkur ederim

  • 19.Mayıs.2008
    ali yazdı

    selam. güzel acıklama yapmıssınız elinize emeginize saglık

  • 29.Mart.2009
    samet yazdı

    gerçekten çok güzel anlatmışsın çok teşekkür ederim.

  • 04.Haziran.2009
    kaan yazdı

    merhaba yazılarınız gerçekten bize cok güzel yol gösteriyor.. bunun için gerçekten çok teşekkürler.. Bir sorum olacak benim bu 3. maddeki @ işaretinin kullanımı nasıl oluyor? Şimdiden teşekkür ederim..

  • 28.Temmuz.2010
    akiza yazdı

    Teşekkürler hocamGüzel bi makale Ellerine SAglık

  • 30.Ağustos.2010
    paslanmaz yazdı

    teşekkürler elinize saglık

  • 23.Haziran.2011
    Metin TURAN yazdı

    Merhaba biligilerinizi paylaştığınız için teşekkür derim fakat bu yazınız da anlamadığım bir şey var , 9. maddede ;
    9- $_REQUEST yerine $_POST kullanın.
    demişsiniz aceba nedenini öğrenebilimiyiz …
    kolay gelsin…

  • 03.Ağustos.2011
    paslanmaz flanş yazdı

    Metin $_REQUEST hem getten gelen veriyi hemde posttan gelen veriyi alır. $_POST ise posttan gelen veriyi aldığı içindir.

Yorumla