JavaScript / HTML5 web oyununun kopyalanmasını veya değiştirilmesini nasıl önlersiniz?


45

JavaScript ve HTML5 kullanılarak oluşturulmuş bir oyun planlamanın ortasındayım.

Birisinin JavaScript'i web sunucusundan kopyalamasını ve kendi oyununu oynamasını (en büyük sorunum değil) ya da kendi JavaScript işlevlerini değiştirmesini ve güvenilir müşteriler için herhangi bir umudunu göstermesini nasıl engelleyebileceğinizi anlamakta güçlük çekiyorum. Oyun sonunda çok oyunculu desteklemek için ise vahşi.

Sadece herhangi birisinin JavaScript'i okumasını önlemek için bir şey yapılabilir mi?

Olmazsa, tüm oyun işlemlerinin bir sunucuda müşterinin tek sorumluluğu kullanıcı girişi ve grafik çizme sorumluluğuna sahip bir yerde mi yapılmalı?


22
Son paragrafta haklısınız, ticari uygulamalar için doğru, oyunlar için de doğru , müşteriye her zaman düşman olarak davranıyorsunuz.
Nate

4
HAZIR EDEBİLİRSem, tarayıcımın zaten bir kopyası var. O zaman başka bir yere de kaydedebilirim. Okumanıza izin veren her şey de kopyalanabilir.
BerggreenDK

Yanıtlar:


44

Tüm oyun verilerinizi ve mantıklarınızı sunucuda saklayın. Oyunun istemci tarafında olan kısmı, yine de (Flash veya Java'da olsa bile) uygun araçlar kullanılarak kopyalanabilir, bu yüzden sadece kabul edin ve çok fazla umursamayın.

Javascript'inizin daha az ulaşılabilir olmasını sağlamak için, okunaklı olması nedeniyle küçültebilirsiniz . Bu, oyun sitelerinin daha hızlı indirilmesini sağladığı için yine de iyi bir uygulamadır.


4
Kodlama uygulamalarına bağlı olarak, sunucudaki içeriğin tümü de tehlikeye girebilir. Kodu küçültmek ve şaşırtmak yalnızca zaman ayırmak istemeyenleri ve mantıksal olarak ne yaptığını belirleyenleri algılar. Sonuç olarak, kodunuzun fikri mülkiyet haklarıyla ilgili endişeleriniz varsa; Web’e koyma.
John

1
Bu, tembel insanları engelleyen küçültmemeniz gerektiği anlamına gelmez. Ayrıca, oyun mantığınızı sunucuda işlemeyi deneyebilir ve json nesnelerini ajax üzerinden döndürmeyi deneyebilirsiniz, ancak geri dönüş hala firebug ile görüntülenebilir. Üretim sürümünüzü karıştırın ancak kendiniz için yoğun bir yorum sürümü tutun (bu bakımı daha da zorlaştırır). İnsanları caydırmak için şeyler yapabilirsiniz, ama asla% 100 güvenli değildir.
John

3
Aslında. Küçük kodu genişletmek çok fazla çaba gerektirmez. jsbeautifier.org
James

@John bazen tembel insanları caydırmakla alakasız olduğunu fark et, çünkü bazı oyunlar tek bir hileci göründüğünde mahvoldu, bu yüzden sadece bir veya daha fazla hile yapıyorsa konuyla alakalı değil.
'.

11

Birisinin JavaScript'i web sunucusundan kopyalamasını ve bununla kendi oyununu oynamasını nasıl önleyebilirsin (benim için en büyük sorun değil)

Yasanın yardım ettiği yer burası. Uygulamada bu pek sık görünmüyor.

ya da oyunun sonunda çok oyunculu oyunu desteklemesi için kendi JavaScript işlevlerini kullanmak ve vahşi ortamdaki güvenilir müşterileri için umutlarını kaldırmak.

Tam da bu sebepten dolayı vahşi doğada güvenilir bir müşteri yok. Şimdi bu rüyadan vazgeç. :)


Yasa, siteyi barındıran site, fikri mülkiyet haklarına çok fazla önem vermeyen bir ülkede olduğunda veya herhangi bir nedenle ülkenize karşı düşmanca olmadığında fazla kullanılmayacaktır. Durum böyle olmasa bile, (potansiyel olarak uluslararası) bir yasal işlem başlatmanın maliyeti, burada bu soruyu soracak birisinin mali kaynaklarının çok ötesinde olabilir.
Paul Legato

Cevabın amacı, yasal işlem önermek için çok fazla değildi, ancak bu tür bir yazılımı kilitlemeye çalışmanın en azından anlamsız olduğunu, en azından kısmen kopyalayacak kişilerin birçoğunun yasalarca yasaklanmasının yanı sıra müşterilerin de haklı çıkması olduğunu önermek Javascript kullanıp kullanmadıklarını tersine mühendislik yapılabilir.
Kylotan

8

Tıpkı herkesin tavsiye ettiği gibi; Sunucu tarafında mümkün olduğunca kod tutun.

Kod kopyalama ile uğraşmak için kullandığım bir yöntem biraz garip, ancak şimdiye kadar iyi çalıştı.

  • Sunucu tarafında, benzersiz bir kimlik oluşturun ve daha sonra saklayın.
  • Sunucu tarafında, html oluşturma sırasında komut dosyası öğesinde benzersiz bir kimlik ekleyin.
  • İstemci tarafında, bir WebSocket bağlantısı oluşturun ve benzersiz kimliği sunucuya iletin.
  • Sunucu tarafı, kimliği geçerli listeyle eşleştir.
  • Eşleşme bulunamazsa, bağlantıyı kapatın.
  • Maç ise edilir bulundu, sizin "doğru" bir ve ıskarta kimliği ile mesaj işleyicisi değiştirin.
  • Gizli kodunuzu müşteriye JSON olarak yayınlayın, {"func": "function () {dostuff ();}"}
  • Müşteri tarafında, "func" içeriyorsa mesajları izleyin, değerlendirin.

Artık gizli kodunuz müşteri tarafında çalışıyor ve görünüm kaynağında veya denetçilerde / konsollarda görünmüyor. Kod almanın hala yolları var, ancak bu biraz daha zor.


Yukarıdaki çözümden bir şey almam gerekirse; Gerçek WebSocket'ı da bağlarım ve bir "sahte istemci" yapmaya çalışırdım ya da bir tarayıcıda bir Firebug hata ayıklama aracı kullanır ve değerleri kontrol etmek için sadece betiği durdururdum.
BerggreenDK

Sayfa yükleme sırasında oluşturuldukları ve komut dosyası bağlantı zamanında atıldığından, şu anda hangi benzersiz kimlikleri kullanabileceğinizi tahmin edemediğiniz sürece sahte bir istemci oluşturamazsınız. Ayrıca, senaryoyu durdurmak ve değerlere bakmak zordur, çünkü isimsiz bir fonksiyonu değerlendiriyorsun. Dediğim gibi, koda girmenin hala yolları var, bu daha zor. Çoğunlukla, kodunuzun "yeterince güvenli" olması için yeterli. Müşteri tarafı koduyla bundan daha fazlasını yapamazsınız.
Stephen Belanger

Gerçek istemciyi sunucudan yükleyen ve geçerli gizli değeri her başlatışında sıyırtan sahte bir istemci yazmak oldukça kolay olurdu.
Paul Legato

Bunun “imkansız” olmadığı kadar kolay olmadığını söyleyemem. Dediğim gibi, çevresinde yollar var. Tamamen güvenli bir sistem diye bir şey yoktur. Sadece yeteri kadar gizlenmiş arayüzler, çoğu kesmek için çok fazla çaba harcayacak şekilde. Bu durumda, kod parçalarını yayınlıyor olacaksınız, bu nedenle bir bilgisayar korsanının kodu almak ve kullanışlı bir yapıya yerleştirmek için bir müşteri oluşturması gerekir. İhtiyacınız olduğu gibi kod akışı yaparsınız, böylece bilgisayar korsanı tam kod dökümüne hemen erişemez.
Stephen Belanger

3

Oyun kodunuzun güvenli olacağından emin olmanın tek yolu, bir müşteri / sunucu türü oyun oluşturmak ve sunucuya olabildiğince fazla kod koymaktır. Ve elbette, bu sunucuyu güvenli hale getirin!

Asıl sorun, eğer bilgisayarımda kod çalışıyorsa, onu inceleyebilir, derine koyabilir ve nasıl çalıştığını çözebilirim. Bu, JavaScript, Flash, C ++, başka bir şey için geçerlidir. Aslında, MMO gelişiminde (mesleki deneyimimin büyük bir kısmı budur), en baştan beri varsayım, müşterinin tehlikeye atıldığı varsayımıdır: müşteri için yazdığınız her şey, istediği kişinin elinde, kötü niyetli veya değil.

Küçültme kodu, orada bulunan birçok araçtan birini kullanarak onu kaldırmak için çok tembel olan insanlara karşı küçük bir koruma sağlar. (Ama üretim kodu olmalıdır veri ayak izini azaltmak için minified edilebilir.)

Ancak, patronunuzun bir tür kod koruması istediği bir durumdaysanız, "Javascript obfuscator" google'ı kullanabilirsiniz - orada en azından JS'yi en az sızdırmaz yapan birçok ücretsiz ve ücretli yazılım var Flash olduğu gibi çözülüyor.


Sadece C ++ 'ın Javascript ile aynı seviyede olmadığını belirtmek istiyorum. C ++, oyun mantığını anlamak için okunması gereken montajı derler. C ++ 'daki her ifade, montajda çok zaman alan bir görev yapan birden fazla satır oluşturabilir. Javascript şaşırtmak, aynı dilde aynı değildir. Herkes onu "güzelleştirebilir" ve neredeyse okunabilir ifadeleri okumaya başlayabilir.
TomTsagk

3

Tüm bu kod gizliliği tartışmalarının yanı sıra, her bir dosyanın üstüne çok net bir telif hakkı bildirimi koyduğunuzdan ve lisansın değişime veya ticari kullanıma izin vermediğini açıkça belirttiğinizden emin olun. Birisi onu kopyalamaya çalışırsa, bu size yasal yol göstericidir. Bu konuda mahkemeye gitmeye istekli değilseniz, bu sorunun tamamı çoğunlukla akademik.


Bu neye mal olursa olsun, ama bu pek değil. Fikri mülkiyet kavramı pratikte pek çok ülkede tanınmamaktadır ve her durumda bir mahkeme davasının yasal maliyeti, özellikle saldırgan başka bir ülkedeyse, bu sitedeki posterin çok ötesinde olabilir.
Paul Legato

0

Sanırım oyununuzu çok oyunculu yaparsanız, oyun mantığınızı sunucuda bulundurmayı gerektirir, muhtemelen en azından çalmayı daha az çekici hale getirirsiniz. Müşteriye gerçekten güvenemezsin. Birinin daha önce de belirttiği gibi, Java ve Flash gibi derlenmiş diller için bile kod metnini bayt kodundan tersine çevirebilecek araçlar var.


-1

Bir Javascript Minifier kullanmanız gerekir. Beğendiğiniz birini bulmak için çekinmeyin mevcut birçok seçenek vardır. Size biraz araştırma yapmak için Yahoo Minifier'i deneyebilirsiniz . Kendim yönetmedim ama ihtiyacınız olanı yapacağını varsayıyorum. Amaç 1) dosya boyutunu küçültmek ve 2) gizliliği engellemek. Bu, tüm boşlukların, yorumların kaldırılması ve değişken adlarının daha kısa, saçma olmayanlarla değiştirilmesiyle gerçekleştirilir.

Günümüzde çoğu web uygulaması önemli miktarda Javascript'e sahiptir ve IP'lerini korumak için bunlar gibi araçları kullanır. Diğerlerinin dediği gibi her zaman sormalısınız, "Bunu sunucuda yapabilir miyim?" önemli veya hassas operasyonlar için, ancak bunun bir koruma sağlaması gerektiğine inanıyorum.


7
Gizliliğin olmadığı güvenlik, güvenlik potansiyelini gizler. :)
Rushyo 10:10

1
Ah lütfen. Bu alıntıyı her zaman duyuyorum ama kesinlikle doğru değil. Gerçek şu ki, JS'nin gizlenmesi en azından bazı insanları caydırır.

2
minifier ona yardım etmiyor. Çoğu "ciddi" insanın bu senaryoları tekrar "genişletmeyi" bildiğini düşünüyorum.
BerggreenDK

1
@Sergio: Bu alıntıyı her zaman duyuyorsun, çünkü biliyorsun, doğru . "Bazı" insanları caydıracak, doğru, ama "bazı" insanları caydırmak anlamsızdır: bir kez çatladığınızda aşağı inersiniz.
'.

-1

Google kapatma derleyicisini kullanın http://code.google.com/closure/compiler/ Bu sadece bir js minimizer değildir;)

Closure Compiler kullanmanın faydaları nelerdir?

  1. Verimlilik. Kapanış Derleyicisi, JavaScript dosyalarınızın boyutunu küçültür ve daha verimli hale getirerek uygulamanızın daha hızlı yüklenmesine ve bant genişliği gereksinimlerinizi azaltmanıza yardımcı olur.

  2. Kod kontrolü. Kapanış Derleyicisi, yasadışı JavaScript için uyarılar ve olası tehlikeli işlemler için uyarılar sunarak daha az buggy ve bakımı daha kolay olan JavaScript üretmenize yardımcı olur.


-1

Veya oyununuzu oluşturmak için Game Maker HTML5 gibi bir şey kullanabilirsiniz. Bu, kodu insanlar için okunamaz hale getireceği anlamına gelir. Ve düzenlemek neredeyse imkansız olacak.


2
-1 Şaşırtma sadece o kadar ileri gider. Bu sorunun, diğer soruların yanıtlarında da belirtildiği gibi, kesinlikle oyunun kopyalanmasını veya değiştirilmesini önlemez.
doppelgreener

-1

Tescilli herhangi bir şey sunucu tarafında tutulmalıdır. Müşteri tarafı, oyunu kullanmayı kolaylaştıracak kadar verirsin.


-1

Her şeyi sunucuya koymak performans sorununa neden olabilir ve bugün bildiğimiz webin tüm potansiyelini gerçekten kullanmıyor olabilir.

Kodunuzu c ++ ile yazıp ikililere derleyebilirsiniz.

Yerel Müşteri (NaCl).

Bkz https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser


GDSE'ye hoş geldiniz. OP özellikle JavaScript'i soruyor; Onlar belki böylece ederken olabilir C ++ yeniden yazmak ve NaCl kullanmak belirtildiği gibi, bu çözüm gerçekten ihtiyaçlarına hitap etmez. Ayrıca, cevaplar makul ölçüde kendiliğinden olmalıdır - NaCl'den bahsetmek ve bir bağlantıyı bırakmak, NaCl'nin ne olduğu veya neden yardımcı olabileceği ile ilgili bir özet sunmak kadar iyi değildir.
Pikalek
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.