• 26-03-2013, 11:56:15
    #1
    Kullandığım scriptte şöyle bir sorun var: Üye girişi çift seçenekli, E mail+Şifre ya da usernaeme+şifre ile giriş yapılabiliyor ama şöyle bir sorun mevcut: Username+Şifre ile giriş yapılabilirken, email ile girişte problem var; şifre yazılmadan sadece email yazıldığında da giriş yapılabilmekte. email+şifre ile giriş yapılmaması ciddi bir güvenlik sorununa neden olmakta.
    
    uyegirisok.php dosyam şu şekilde:
    
    ---------------
    <?
    
    $email = guvenlik($_POST['email']);
    
    $parola = md5(guvenlik($_POST['parola']));
    
    if ($email == "" or $parola == ""){
    	echo "
    	<script>
    
    var nowOnload = window.onload;
    
    window.onload = function () { 
    
    alert('Lütfen E-mail Adresinizi / Kullanıcı Adınızı ve Parolanızı Giriniz !');
    
    window.location = 'index.php?page=giris';
    
    if(nowOnload != null && typeof(nowOnload) == 'function') { 
    
    nowOnload(); 
    
    } 
    
    } 
    
    </script>
    	";
    } else {
    
    $guvenlik = $_SESSION['kod'];
    
    
    
    	$pass = $parola;
    
    	$sql = mysql_query("SELECT * FROM uyeler WHERE email = '$email' or username='$email' and parola = '$pass'");
    
    	if (mysql_num_rows($sql) < 1){
    
    	header("location: index.php?page=giris&err=1");
    
    	} else {
    
    	$sql = mysql_query("SELECT * FROM uyeler WHERE email = '$email' or username='$email' and parola = '$pass'");	
    
    	$a = mysql_fetch_assoc($sql);
    
    	if ($a[onay] != 1 ){
    
    	header("location: index.php?page=giris&err=2");	
    
    	} else {
    
    	$_SESSION['giris'] = 1;
    
    	$_SESSION['uye'] = $a[Id];	
    
    	header("location: index.php");
    
    	}
    
    	}
    
    }
    
    ?>
    Bu problemi aşmam için bu kodlar nasıl düzenlenmeli lütfen yardımcı olur musunuz?
  • 24-04-2013, 10:06:26
    #2
    Hocam su sekilde yapin eger girilen veri email adressi ise ayri, düz yazi ise ayri sorgu yaptirin. Yani su sekilde:

    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
    $sql_addition = "email = '{$email}'";
    } else {
    $sql_addition = "username = '{$email}'";
    }
    
    $query = mysql_query("select * from uyeler where {$sql_addition} and parola = {$pass}");
  • 25-04-2013, 23:45:42
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    daha iyi öğrenebilmeniz için
    or dediğinizde ondan sonraki AND ler bir işe yaramaz yani or demeden önce siz email = 'email' ise veya kullanıcıadı = 'kullanıcı' ve şifre='sifre' ise demişsiniz kısaca.

    Doğrusu şöyledir:
    $sql = mysql_query("SELECT * FROM uyeler WHERE email = '$email' AND parola = '$pass' OR username='$email' AND parola = '$pass'");