Bu kodlama soru yerine, daha bir sistem tasarımı soru / zorluktur.
Temelde, bir araya atma düşünüyorum Bejeweled sadece HTML, CSS ve JavaScript kullanarak Facebook'ta esque oyun. Bu çoğunlukla önemsiz olmayan bir proje aracılığıyla FBJS tüm küçük uyarılar öğrenmek arzusuyla dışında.
Yani burada anlaşma. Facebook için geliştirirken, fiili API çağrıları çok pahalıdır; sadece Facebook sunucularına ek bir POST orada api çağrı sınırlama da vardır ve endişelenecek bir daraltma vardır. Özetle, Facebook'a az çağrılar daha iyi. Hatta bu basit bulmaca oyunu zamanlama kaygıları ile birleştirin ve agresif genel olarak geri aramaları sayısını en aza indirmek için iyi bir neden var.
Bir güvenlik uzmanı olmak değil, burada ben ile geldim tasarım var:
- Oyun sayfasında bir rasgele tohum gömün.
- (Gerektiğinde yanı sıra ek parçaları) oyun tahtası oluşturmak için bu tohum kullanın.
- Geçen hareket beri zamana dayalı her oyuncu taşındıktan sonra tohum (xor, birleştirmek ve karma, böyle bir şey), Tweak. Düzenleme: Ben muhtemelen de tohum mutasyona alınan fiili hareket içermelidir.
- Oyun tamamlandığında aşağıdaki geri göndermeden: oyun başlangıç zamanını, her hamle alınır ve ne zaman ve istemci tarafı sonuçları.
- sunucuda, aklı kez başlangıç zamanını kontrol ve hareket verilen verilerle oyuna yeniden çalıştırın ve ardından onaylamak olduğunu sonuçları maç.
- hizmet reddi azaltmak için, oyunun kendisi dönüş X koşulu ile bir galibiyet olması tweaked edilecektir.
- Sunucu bir çeşit kahin olarak kullanılıyor vazgeçirmek için, geçersiz bir oyun geri gönderme kullanıcı (X dakika sırasına olmak üzere) bazı sabit zaman X için men edilecektir.
oyun oynanır önce bir oyun bittikten sonra kimse almaya rastgele tohum saklamak için ve oyun geçerli olup olmadığını bir oyuncunun puanı güncellemek için: Bu tasarım maç başına üç Facebook'ta çağrı oynanan gerektirir.
(Ne karşı ispat sistemin çalışıyorum düz skor sızdırma kadardır ?: // ... myscore = 999999999 http veya benzeri). Ayrıca kullanıcı parçaları bir sonraki kuruluna geliyor ne söyleyebilir ki burada, ileriyi saldırıları azaltmak istiyorum. Sunucu barındırma (Aksi kasıtlı veya) üzerine hizmet reddi saldırıları da engellenmelidir.
Gerçek bir soru, herkes bu tasarımda bir kusur görebilir? Eşdeğer, benim kriterlerini karşılayan daha basit bir tasarım var mı?
Not: Farkındayım bu muhtemelen, ama onun ilginç bir soru hiçbiri az ne kadar gereksiz.
Ben denemek ve benim akıl göstermek detayli için buraya kadar bazı rakamları atacağım, bunlar gayet kaba ama yararlı olur.
Bir 10x10 oyun tahtası varsayarak, geçersiz çoğu (iki bitişik parçaları takas) ~ 200 potansiyel hareket vardır. yönettiği çevirmek başına ortalama 5 geçerli hamle üzerine vardır diyelim. Biz 50 30,000 milisaniye çerçeveye oyuncu eylemleri sınırlamak için, bit atmak değil ince ayar algoritmasını sağlanan 149.750 potansiyel yeni karmaları var; Ben kullanılan bir kriptografik karma varsayarak bir saldırgan tarafından hesaplanmalıdır en az 10.000 potansiyel yeni karmaları var diyelim konusunda kendine güvenir. Şuna, sizin karar ağacı patlar çok hızlı bir min-max algoritma atmak edin. Şuna bir oyun oturumu sona erme atmak 30 dakika demek, ben makul karşı savunma olamaz sizin için oynamak biraz bot programı yazmaya karmaşıklığı nedeniyle eşdeğer saldırıyı inanıyoruz.













