• 15-01-2018, 16:38:14
    #1
    Platin üye
    Merhabalar,
    Elimde bir sistem var ve üyelik sisteminde kullanıcı değiştirme problemi var. Yani kullanıcılar kendi panelindeyken başka birşeye tıkladığında başka birinin hesabındaymış gibi onun tüm bilgilerini görüp onun adına işlem yapabiliyor. Sürekli olan birşey değil, tamamen rastlantısal oluyor bu olay. Sunucu nignx kullanıyor ve PHP 7 versiyon
    Login Sayfası
    if( isset($_POST["giris_onay"]) && $_POST["giris_onay"] == "2" ) {
        // strip_tags(html kaldır), trim(boşluk kaldır), dbtrim(tırnak sorunu)
        $username = strip_tags(trim(dbtrim($_POST["username"])));
        $password = strip_tags(trim(dbtrim($_POST["password"])));
        // şifrelenmiş parola
        $hash = create_password($password);  
        if( dbcount("id", "uyeler", "username='".($username)."' AND password='".($hash)."'") <= 0 ) {
            $mesaj = "<div id=\"blok\"><p><font style=\"color:red;\">Böyle bir kullanıcı bulunmuyor!</font></p></div>";
        } else if( dbresult("SELECT onaylimi FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") != '1' ) {
            $mesaj = "Hesabınızı aktif etmelisiniz! E-Posta adresinizi kontrol edin.";
        } else if (dbresult("SELECT ban FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") == '1') {        
            $mesaj = "<div id=\"blok\"><p><font style=\"color:orange;\">Hesabınız engellenmiştir.</font></p></div>";
        } else {
            // giriş yap
            $result = dbquery("SELECT * FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'");
            $uyebilgi = $result->fetch_assoc();
            // cookie set - 7 günlük
            $_SESSION['login'] = $_POST["username"];
            $_SESSION['password'] = $hash;
            // üye sayfasına gönder
            header("Location: /home");
        }
    }
    Baglanti.php (DB ve fonksiyonların olduğu dosya tüm sayfalara includeli.) Burada tüm sayfalardan üyelerin bilgilerini çekmek için bir fonksiyon mevcut. Ayrıca sayfanın başında ob start ve session start kodu mevcut.
    if( isset($_SESSION['login']) ) {
        $giris_yapildimi = 'evet';
        $sl= $_SESSION['login'];
        $sp= $_SESSION['password'];
        $result = dbquery("SELECT * FROM uyeler WHERE username='".($sl)."' AND password='".($sp)."'");
        $uyebilgi = $result->fetch_assoc();
    } else {
        $giris_yapildimi = 'hayir';
        $uyebilgi = array();
    }
    Kaç gündür uğraşıyorum fakat bu problemi çözebilmiş değilim.
  • 15-01-2018, 17:08:31
    #2
    Problemi net anlayabilmek için kullanıcı değişirken sabit bir kullanıcıyı mı alıyor? Yoksa rastgele mi geliyor?
  • 15-01-2018, 17:09:19
    #3
    ztk
    Kimlik doğrulama veya yönetimden onay bekliyor.
    sessionların saklandığı dosya boyutu küçük ise yeni sessionları yazmıyor olabilir veya yeni gelen sessionları bir öncekinin üzerine yazıyor olabilir. bu da en son giren kişinin oturumunun bir öncekinde görünmesine neden olabilir.
    php.ini dosyasında aşağıdaki parametreleri kontrol edin.
    session.save_path =
    session.cookie_secure =
    session.use_cookies =
    session.use_only_cookies =
    session.name =
    session.entropy_length =
    session.cache_limiter =
    session.cache_expire =
    session.hash_function =
  • 15-01-2018, 17:16:59
    #4
    BND
    Üyeliği durduruldu
      if( isset($_POST["giris_onay"]) && $_POST["giris_onay"] == "2" ) {
          // strip_tags(html kaldır), trim(boşluk kaldır), dbtrim(tırnak sorunu)
          $username = strip_tags(trim(dbtrim($_POST["username"])));
          $password = strip_tags(trim(dbtrim($_POST["password"])));
          // şifrelenmiş parola
          $hash = create_password($password);
      if ( (strlen($username)>=1) or (strlen($hash)>=1) ) {
          if( dbcount("id", "uyeler", "username='".($username)."' AND password='".($hash)."'") <= 0 ) {
              $mesaj = "<div id=\"blok\"><p><font style=\"color:red;\">Böyle bir kullanıcı bulunmuyor!</font></p></div>";
          } else if( dbresult("SELECT onaylimi FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") != '1' ) {
              $mesaj = "Hesabınızı aktif etmelisiniz! E-Posta adresinizi kontrol edin.";
          } else if (dbresult("SELECT ban FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") == '1') {       
              $mesaj = "<div id=\"blok\"><p><font style=\"color:orange;\">Hesabınız engellenmiştir.</font></p></div>";
          } else {
              // giriş yap
              $result = dbquery("SELECT * FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'");
              $uyebilgi = $result->fetch_assoc();
              // cookie set - 7 günlük
              $_SESSION['login'] = $_POST["username"];
              $_SESSION['password'] = $hash;
      if ( (strlen($_SESSION['login'] )<=0) or (strlen( $_SESSION['password'])<=0) ) {
      session_destroy();
      header("Location: /login"); //login nereyse
      die;
      }
              // üye sayfasına gönder
              header("Location: /home");
          }
      } else {
      session_destroy();
      header("Location: /login"); //login nereyse
      die;
      }
      }
       
       
      
    if( isset($_SESSION['login']) ) {
          $giris_yapildimi = 'evet';
          $sl= $_SESSION['login'];
          $sp= $_SESSION['password'];
      if ( (strlen($sl )<=0) or (strlen( $sp)<=0) ) {
      session_destroy();
      header("Location: /login"); //login nereyse
      exit;
      }
          $result = dbquery("SELECT * FROM uyeler WHERE username='".($sl)."' AND password='".($sp)."'");
          $uyebilgi = $result->fetch_assoc();
      if ($uyebilgi['username']!== $_SESSION['login']) //loginin usernamei tuttuğunu varsaydım. Değilse uygun biçimde değiştirin. Buraya password de eklenebilir.
      session_destroy();
      header("Location: /login"); //login nereyse
      exit;
      } else {
          $giris_yapildimi = 'hayir';
          $uyebilgi = array();
      session_destroy();
      header("Location: /login"); //login nereyse
      die;
      }
  • 15-01-2018, 17:26:39
    #5
    Platin üye
    ztk adlı üyeden alıntı: mesajı görüntüle
    sessionların saklandığı dosya boyutu küçük ise yeni sessionları yazmıyor olabilir veya yeni gelen sessionları bir öncekinin üzerine yazıyor olabilir. bu da en son giren kişinin oturumunun bir öncekinde görünmesine neden olabilir.
    php.ini dosyasında aşağıdaki parametreleri kontrol edin.
    session.save_path =
    session.cookie_secure =
    session.use_cookies =
    session.use_only_cookies =
    session.name =
    session.entropy_length =
    session.cache_limiter =
    session.cache_expire =
    session.hash_function =
    Bunları inceledim evet. Standart ayarlar mevcut. Herhangi bir problem göremedim.

    mrxtix adlı üyeden alıntı: mesajı görüntüle
    Problemi net anlayabilmek için kullanıcı değişirken sabit bir kullanıcıyı mı alıyor? Yoksa rastgele mi geliyor?
    Rastgele

    BND adlı üyeden alıntı: mesajı görüntüle
    if( isset($_POST["giris_onay"]) && $_POST["giris_onay"] == "2" ) { // strip_tags(html kaldır), trim(boşluk kaldır), dbtrim(tırnak sorunu) $username = strip_tags(trim(dbtrim($_POST["username"]))); $password = strip_tags(trim(dbtrim($_POST["password"]))); // şifrelenmiş parola $hash = create_password($password); if ( (strlen($username)>=1) and (strlen($hash)>=1) ) { if( dbcount("id", "uyeler", "username='".($username)."' AND password='".($hash)."'") <= 0 ) { $mesaj = "<div id=\"blok\"><p><font style=\"color:red;\">Böyle bir kullanıcı bulunmuyor!</font></p></div>"; } else if( dbresult("SELECT onaylimi FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") != '1' ) { $mesaj = "Hesabınızı aktif etmelisiniz! E-Posta adresinizi kontrol edin."; } else if (dbresult("SELECT ban FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'") == '1') { $mesaj = "<div id=\"blok\"><p><font style=\"colorrange;\">Hesabınız engellenmiştir.</font></p></div>"; } else { // giriş yap $result = dbquery("SELECT * FROM uyeler WHERE username='".($username)."' AND password='".($hash)."'"); $uyebilgi = $result->fetch_assoc(); // cookie set - 7 günlük $_SESSION['login'] = $_POST["username"]; $_SESSION['password'] = $hash; if ( (strlen($_SESSION['login'] )<=0) and (strlen( $_SESSION['password'])<=0) ) { session_destroy(); header("Location: /login"); //login nereyse die; } // üye sayfasına gönder header("Location: /home"); } else { session_destroy(); header("Location: /login"); //login nereyse die; } }
    if( isset($_SESSION['login']) ) { $giris_yapildimi = 'evet'; $sl= $_SESSION['login']; $sp= $_SESSION['password']; if ( (strlen($sl )<=0) and (strlen( $sp)<=0) ) { session_destroy(); header("Location: /login"); //login nereyse exit; } $result = dbquery("SELECT * FROM uyeler WHERE username='".($sl)."' AND password='".($sp)."'"); $uyebilgi = $result->fetch_assoc(); if ($uyebilgi['username'])!== $_SESSION['login']) //loginin usernamei tuttuğunu varsaydım. Değilse uygun biçimde değiştirin. Buraya password de eklenebilir. session_destroy(); header("Location: /login"); //login nereyse exit; } else { $giris_yapildimi = 'hayir'; $uyebilgi = array(); session_destroy(); header("Location: /login"); //login nereyse die; }




    Sonradan eklediğim AND'leri OR olarak değiştirirsiniz. Düzenleme yapınca bozuk görünüyor.
    Deneyeceğim teşekkürler