HTML5 oyunlarından sunucuma puan göndermeyi nasıl koruyabilirim


13

Arka uçta java kullanıyorum. HTML5'te bir oyunum var; kullanıcı tamamladığında skoru veritabanına kaydetmek için bir Ajax çağrısı gönderir. Şimdi, birisi bu ajax isteğini değiştirmek ve sunucuya çok daha iyi bir puan göndermek için Fiddler ve firebug gibi araçları kolayca kullanabilir. Kullanıcının puanları değiştiremediğinden nasıl emin olabilirim!

Yanıtlar:


18

Sunucuya sadece bir tam sayı puanı göndermeyin. Skorun gerçekçi olduğunu doğrulamak için kullanılabilecek bir oyun istatistikleri koleksiyonu gönderin. Veya skoru hesaplamak için önceden paylaşılan bazı anahtarlar uygulayabilirsiniz . Oyun boyunca artımlı skorlar ve istatistikler gönderebilir ve artışın makul olmasını sağlayabilirsiniz.

Ancak, bu konuda fazla endişelenmezdim. Yukarıdaki öneriler daha zor hale getirecek, ancak sahte bir puan göndermeniz imkansız olmayacaktır. Ancak, biraz zorlaştırırsanız, oyununuzu oynayan insanların büyük bir çoğunluğu onu aldatmaya çalışmakla ilgilenmeyecektir.

Oyununuzun sunucunuzla nasıl iletişim kurmasına izin verdiğinize dikkat edin. Oyununuzun kesmek için sunucunuza bir giriş noktası olmasını istemezsiniz. Girişinizi her zaman doğruladığınızdan ve istemciye asla güvenmediğinizden emin olun.


6
"Asla müşteriye güvenme" ile tamamlamak için programmers.stackexchange.com/questions/150127/… ve gamedev.stackexchange.com/questions/37392/… adresine bakın
dievardump

@ Byte56 hiçbir gizlilik veya şifreleme biçimi, kodunuzu oyun sırasında oyun verilerini değiştirmek için kullanılan bir hata ayıklayıcıdan koruyamaz. Oyun istemcide gerçekleşirse, bu hile biçimini önlemek aslında imkansızdır. Javascript etkin bir tarayıcı güvenilir bir bilgi işlem cihazı değildir.
MarkR

10

Byte56'nın dediği gibi: "asla müşteriye güvenme", ancak:

İstemciye asla güvenmenin bir bedeli yoktur:
Sunucuda oynanan tüm oyunlara sahip olmak altyapı maliyetinizi büyük ölçüde artıracaktır.

Oyuncuların çoğunun hile yapmayacağını
ve en yüksek puanların biraz sonra yerleşeceğini ve çok değişmeyi bırakacağını varsayarsak

orta yolu var.

Oyunları kaydedin (istemcide).
(Oyun türüne bağlı olarak, süper kolay (örneğin satranç) veya biraz karmaşık (örneğin çok oyunculu FPS) olabilir,
ancak her zaman yapılabilir.)

Bir oyuncu bir oyunu bitirdiğinde sadece skoru gönderin.
Skor, üstte belirli bir aralık dahilindeyse (örn. İlk% 1 veya ilk 5)
oynatıcıdan kaydedilmiş verileri isteyin
ve o oyunu sunucuda tekrar oynayın.
Skorlar eşleşiyorsa skoru kabul edin.

Bu şekilde, oyunların çoğu için ek sunucu tarafı kaynaklarına ihtiyacınız yoktur,
ancak en yüksek puanların geçerli olduğundan emin olabilirsiniz.


2
Başka bir deyişle, kim en yüksek puanlar dışında bir şey için aldatırsa kimin umurundadır (neden yine de bunu yapsınlar?)
jhocking

4

Onun hakkında endişelenme; istemciye güveniyorsanız, tüm saldırılardan korunmak aslında imkansızdır. Kimse Fiddler vb. Kullanmıyorsa, AJAX isteğini değiştirmek için, bir JS hata ayıklayıcısını tetikleyebilir ve oyun verilerinizi kendilerine 1000 yaşam vb. Verecek veya kodunuzu değiştirebilecek veya aklınıza gelmeyen 100 şey yapabilir.

Birkaç yıl önce böyle bir oyun yazdım ve bildiğim kadarıyla kimse bu şekilde aldatmadı. Skor tablosunda isminizin olması dışında hiçbir ödül yoktu.


4

Sosyal liderlik tablolarını kullanarak hile yapmak için sosyal motivasyonu azaltın (hile sadece birkaç arkadaşınıza iyi görünmenizi sağlar, herkes için bozmaz).

Sunucuda doğrulayın. Joel Poloney, Game Developer 2012 Eylül "Online Oyununuzu Ölçeklendir" bölümünde iyi teknikler yazdı


2

Hile korumalı bir çevrimiçi oyun oluşturmak istediğinizde, sunucudaki tüm oyun mantığını işlemeniz gerekir. İstemci tarafında olan her şey kullanıcı tarafından kontrol edilebilir ve değiştirilebilir. Şifreleme veya gizleme gibi deneyebileceğiniz teknikler var, ama sonuçta bunların hepsi, yeterince kararlı bir kişi tarafından atlanabilecek müstehcenlik yoluyla güvenlik.

Elbette, sunucuda çalışan bir oyunun geliştirilmesi çok daha karmaşıktır, sunucu taraflı çok daha fazla kaynak gerektirir ve ağ gecikmesi oyun deneyimine (özellikle hızlı tempolu oyunlar için) zararlıdır, ancak etkili bir şekilde oyuncuların hile yapmasını önler.


Bu bile tüm hile yapmayı engellemez - sadece bariz "evet, ben bir bazilyon puan var" şeyler. Yana bir şey istemci üzerinde çalıştırmak zorundadır, bunlar ne olursa olsun, bazı kontrolü ile bitirmek. En azından, herhangi bir istemci - özellikle bir web tarayıcısı - yazılabilir.
cHao
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.