• 30-10-2016, 15:14:47
    #1
    Üyeliği durduruldu
    Selamlar,
    Bir slot oyununda js ile oyun kazanıldığında veya kaybedildiğinde ajax ile php ye veri gidiyor ki, oyuncuya puan verilsin veya düşülsün.

    Ancak burada şöyle bir problemimiz var, ajax ile yolladğımız veriyi başka bir kaynaktan yolladığımızda da php puan verme veya düşürme işlemini yapabiliyor. örneğin postman ile php'mize birisi giden veriyi tekrar yollayıp oyunu oynamadan puan kazanabilir.

    Bunu önlemek için ne yapabilirim?

    Ücretli, ücretsiz yardımlarınıza açığım.

    İyi çalışmalar.
  • 30-10-2016, 15:30:08
    #2
    Hocam oyuncular sadece üyelerse üye id'sini sessiondan alırsanız sorun çözülür. Üye olmayanlar da oynayabiliyorsa her oyuncuya yine sessionda tutulmak üzere bir key verebilirsiniz.

    Siz muhtemelen oyuncu kimliğine ilişkin verileri de puan vs ile beraber ajaxla gönderiyorsunuz. Oyuncu kimliğine ilişkin veriler sessiondan okunursa sorun çözülecektir.
  • 30-10-2016, 15:51:27
    #3
    Üyeliği durduruldu
    codeksper adlı üyeden alıntı: mesajı görüntüle
    Hocam oyuncular sadece üyelerse üye id'sini sessiondan alırsanız sorun çözülür. Üye olmayanlar da oynayabiliyorsa her oyuncuya yine sessionda tutulmak üzere bir key verebilirsiniz.

    Siz muhtemelen oyuncu kimliğine ilişkin verileri de puan vs ile beraber ajaxla gönderiyorsunuz. Oyuncu kimliğine ilişkin veriler sessiondan okunursa sorun çözülecektir.
    Evet hocam, sessiondan alıyorum. dışarıdan post durumunda session zaten açıksa yinede post geçebilir diye düşünmüştüm. kodlar da şu şekilde:

    <?php 
    include("lc.php");
    include("conf.php");
    $id = $_SESSION["id"];
    $game = $_POST["game"];
    
    if($game == "win"){
    	mysql_query("UPDATE users SET points = points + 500 WHERE id = '".$id."'");
    }
    
    if($game == "lose"){
    	mysql_query("UPDATE users SET points = points - 1 WHERE id = '".$id."'");
    }
     
    ?>
  • 30-10-2016, 16:26:53
    #4
    ayrach adlı üyeden alıntı: mesajı görüntüle
    Evet hocam, sessiondan alıyorum. dışarıdan post durumunda session zaten açıksa yinede post geçebilir diye düşünmüştüm. kodlar da şu şekilde:

    <?php 
    include("lc.php");
    include("conf.php");
    $id = $_SESSION["id"];
    $game = $_POST["game"];
    
    if($game == "win"){
    	mysql_query("UPDATE users SET points = points + 500 WHERE id = '".$id."'");
    }
    
    if($game == "lose"){
    	mysql_query("UPDATE users SET points = points - 1 WHERE id = '".$id."'");
    }
     
    ?>

    Pardon hocam. Ben bir üye kendine ait olmayan puanı alıyo durumuna gitti aklım sanırım.

    O zaman captha mantığında bişeyler yapılabilir sanırım. Oyun sayfasına girildiğinde random key şekline resim oluşturan ve bu keyi sessiona yazan bir php dosyası <img src="..."> içinde sayfaya çekilir ve gizlenir. Puan, captha ile birlikte hedef sayfaya gönderilir. postla gelen captha keyi sessiondaki keyle eşleşiyorsa puan yazılır. Ajaxa cevap dönünce js ile captha resminin src özniteliği yenilenir ve session değişmiş olur.

    Edit: saçma oldu ya. captha manual yazılmadıktan sonra direk forma eklenirse bi işe yaramaz ki basit bi botla zaten formdaki captha alınır.

    Aklıma gelen sağlıklı bişey yok şimdilik. Kolay gelsin.
  • 31-10-2016, 08:32:41
    #5
    Postman'e gerek yok, bahsettiğiniz işlem developer konsolu üzerinden bile yapılabilir.

    Mümkünse oyuncunun oyunu kazanıp kazanmadığını PHP ile belirleyin. Değilse bir JavaScript kodu ile, rastgele oluşturulacak bir kodu kendi yazacağınız benzersiz fonksiyon ile hash'e çevirip, rastgele kod ve hash'i PHP'ye gönderip, kendi yazdığınız JS kodunun PHP versiyonu ile kodu tekrar hash'e çeviril AJAX ile gelen hash ile uyuşup uyuşmadığını kontrol edebilirsiniz. Bir kez kullanılan hash'i 24 saat süreyle kullanılamaz hale getirip koruma ekleyebilirsiniz. Hashleyeceğiniz kodu da kullanıcının sistem saati, IP adresi gibi bilgilerle oluşturup aynı kodun ikinci kez hashlenmemesini sağlayabilirsiniz. JavaScript'i pack etmeniz gerekecek. Ancak üst seviye biri bu sistemi kırabilir. Bu yüzden en iyisi oyuncunun kazanıp kazanmadığını PHP ile belirlemek.
  • 31-10-2016, 13:59:03
    #6
    Üyeliği durduruldu
    En basit tarifi ile aşağıdaki şekilde yapabilirsiniz;

    Oyun sayfasında oyuna başlamadan önce sonuç için bir token oluşturursunuz.

    Oyun bitiminde ilgili tokeni kullanarak puan yükseltme veya azaltma işlemini yaparsınız.

    Bu işlemi yaptıktan sonra ilgili tokeni silersiniz.
  • 01-11-2016, 11:40:29
    #7
    Eğer ücretli olarak yardım almak isterseniz ulaşabilirsiniz.
  • 01-11-2016, 12:33:20
    #8
    Üyeliği durduruldu
    sewakldawk adlı üyeden alıntı: mesajı görüntüle
    Postman'e gerek yok, bahsettiğiniz işlem developer konsolu üzerinden bile yapılabilir.

    Mümkünse oyuncunun oyunu kazanıp kazanmadığını PHP ile belirleyin. Değilse bir JavaScript kodu ile, rastgele oluşturulacak bir kodu kendi yazacağınız benzersiz fonksiyon ile hash'e çevirip, rastgele kod ve hash'i PHP'ye gönderip, kendi yazdığınız JS kodunun PHP versiyonu ile kodu tekrar hash'e çeviril AJAX ile gelen hash ile uyuşup uyuşmadığını kontrol edebilirsiniz. Bir kez kullanılan hash'i 24 saat süreyle kullanılamaz hale getirip koruma ekleyebilirsiniz. Hashleyeceğiniz kodu da kullanıcının sistem saati, IP adresi gibi bilgilerle oluşturup aynı kodun ikinci kez hashlenmemesini sağlayabilirsiniz. JavaScript'i pack etmeniz gerekecek. Ancak üst seviye biri bu sistemi kırabilir. Bu yüzden en iyisi oyuncunun kazanıp kazanmadığını PHP ile belirlemek.
    Kullanılabilirlik açısından oyun JS olmalı. Öteki türlü kullanıcı kaybedeceğime inanıyorum.
    Ek olarak, oluşturulacak token her işlemde tarayıcı tarafından alınabilir. bu sefer post giderken hash ile birlikte yollamak sistemi geçmek için yeterli olacaktır. js de oluşturduğumuz bi token veya hashi saklama şansımız olmadığını düşünüyorum.

    yada böyle bir şansımız var ise tarayıcı tarafında nasıl saklanılabilir?

    ben çözüm olarak alternatif şöyle birşey düşündüm; post yollanan php sayfasında oyuncunun tüm hareketlerini takip eden bir sistem.
    yani slot oyununda yenebileceği oran belli, bu adam ardarda yeniyorsa hile yapıyor demektir. bunu algılayacak bir algoritma ile bi nebze önüne geçebilirim. ancak yine de adam bir defaya mahsus hileyi yapabilir. bu konuda bir fikriniz var mı?
  • 01-11-2016, 13:30:19
    #9
    http://www.xajax-project.org/ sorunuzun çözümü ve yanıtı burada.

    JS betiklerini php üzerinden üreterek birçok kontrole hakim olursunuz. Biraz incelediğinizde kafanızda ampül yanacak emin olun