gkaradagan adlı üyeden alıntı: mesajı görüntüle
merhabalar;

biraz makale okuyordum güvenlikle ilgili ama aklım bir yerde karıştı yardımcı olursanız sevinirim arkadaslar ben şimdi

inputlardaki name ile bile bilgileri gonderiyorum
@$kullanici=addslashes(strip_tags(htmlspecialchars($_POST['kullanici'], ENT_QUOTES))); 
@$sifre=$_POST['sifre'];
Bu Şekildede Giriş Yaptırıyorum

 @$sifre=md5(md5($sifre)); 
 $sor=mysql_query("select kullanici,sifre from uyeler where kullanici='$kullanici' and sifre='$sifre'");
 if(@mysql_num_rows($sor)>0){
Şimdi Okudugum makalede sql inject tam olarak boyle oluyormus
örnek olarakta
‘ OR 1=1 ‘ şifre boyle girilirse kabul edecektir demiş deniyorum kabul etmıyor


sonra $id değerlerini veya index.php?git=Buradaki değelreri değiştirebilirler diyor ama değiştirsede boş ekran çıkar Switchde gostermemişim zaten haksızmıyım ?
or 1 = 1 hikayesi sorgulamadaki hatadan kaynaklanır.
girişi databaseden ya da bir fonksiyondan gelen TRUE yanıtına bağlarsan
or 1=1 olayı her zaman 0 or 1 den true döndürür.
yani
 
if($sife == $sifre){
giriş yap
}
şeklinde kullananlar için açıktır o. çünkü o taktirde sorgu şifre = şifre ya da 1=1 şeklinde sorgulanır ve yanıt true döner giriş yapar.

Sorguyu mysql_num_rows ile satır saydırarak yaptğında zaten o or1=1 açığı kapanmış olur.

senin yaptığın filtreleme hala tehlikeli.
database e sorgu göndermeden önce herşeyden önce mysql_real_escape_string fonksiyonundan geçir. strip_tags ve html_specialchars seni xss açıklarından korur, ama database e hala sorgu gidebilir.

eleman kullanıcı adı olarak ahmet yerine
ahmet'; TRUNCATE TABLE 'uyeler'; SELECT * uyeler WHERE sifre =
gibi bir şey yaparsa arıza çıkabilir.

Ayrıca her zaman formlarda veri denetimi yap. Mesela kullanıcı adı 15 karakterden uzunsa trim le kes.
preg_match ile formdan gelen veri beklentilere uygun mu diye denetlemek lazım.
mesela bir isim içinde harf ve sayı dışında karakter varsa ya da beklenilen uzunluğun dışındaysa kafadan reddetemk lazım.