Hazırladığım scriptte , ne tür güvenlik açıkları olabilir.
mesela ben girişleri session lar ile yapıyorum , kullanıcı adında bir session atıyor , başka biri aynı isimle bu sessionu atasa kendisine yetki vermiş olmazmı.
birde post ve get ile çekerken sql injection gibi açıklardan korunmak için hangi komutlarını önerirsiniz
sayı değeri ve metin değerleri için.
başka olabilecek açıklar nelerdir onlar hakkında da bilgi verebilirseniz sevinirim.
en çok kafama takılan şu üye girişi olayı.
PHP güvenlik durumları hakkındaki sorularım
5
●377
- 06-04-2010, 12:28:45Eposta Aktivasyonu Gerekmekte
- 06-04-2010, 12:36:31Üyeliği durdurulduAynı üye ismi alamasınlar onu kontrol ettir php ile. Register_globals off durumda olsun. Sifrelerini $sifre=trim($sifre); olarak gecirt. Ve klasorlerinin icinde index.php yoksa hepsine boşta olsa index.html at. Kolay gelsin
- 06-04-2010, 14:50:55Eposta Aktivasyonu Gerekmekteaynı üye ismi alınamıyor zaten girişler için demiştim ben , üye giriş yaptıktan sonra kullanıcı ya session atıyor.
- 06-04-2010, 15:16:35Sql injection, remote file injection, local file injection, xss açıkları, html kod enjekt etmek, Remote Command Execution, charset sorunları ... saymakla bitmez
Aslında önlemler basittir. mysql real string fonksiyonları ile sql injection'u kısmen engelleyebilirsin. include, require 'lerde değişken kullanırken extra dikkatli olman gerekir.
Mesela en çok php coderların yanıldığı nokta! :
Üye girişi kısmında kullanıcı adını session olarak atarlar ama diyelim ki 2 kişi aynı kullanıcı hesabından giriş yaptı, birisi şifreyi değiştirdi ne oldu? İkiside halen login olmuş durumda. Bunu engellemek mesela kullanıcı paneli panel.php olsun oraya tekrar sorgulatıp kullanıcı bilgisini kontrol ettirebilirsin veya her sayfaya include edilen bir ayar dosyası varsa:
<? if ($_SESSION['uadi'] != '') { // $_SESSION['uadi'] ve $_SESSION['upass'] sql sorgulaması ile kontrol ettir // Eğer doğruysa sorun yok, değilse destroy yaptırıp sessionları sildir. } if ($_SESSION['uadi'] == '' ) { //sorun yok } ?>Zaman içinde öğreneceksin, bol bol makale oku ama direk orada yazılanları uygulama nerede ne yaptığını mantığını kavra. - 06-04-2010, 15:29:04Üyeliği durdurulduEğer yaptığın sistemdeki hedef kullanıcı sayın ortalama değerlerde ve sunucunun bunu karşılayabileceğini düşünüyorsan bir kaç hile kullanarak memcache & mysql kullanabilirsin. Sisteme giriş yaparken kullanıcı adı ve şifresini sqlden alır ve memcache cacheler. Kullanıcı adı şifre gereken her yerde phpden query çalıştırırsın
örnek :
$query = "SELECT COUNT(*) FROM uyeler WHERE k_adi='" . $_SESSION['kadi'] . "' AND sifre='" . $_SESSION['sifre'] . "'";
Eğer çok kullanıcın var ise bu queryi kullanmak özellikle ve özellikle memcache veya başka bir sql cache yazılımı kullanmıyorsanız sisteminize ufak da olsa bir ağırlık katıcaktır.
Aslında önlemler basittir. mysql real string fonksiyonları ile sql injection'u kısmen engelleyebilirsin. include, require 'lerde değişken kullanırken extra dikkatli olman gerekir.