Güvenli bir şekilde geliştirme ve hileleri önleme için belirli taktiklere dalmadan önce, Roblox güvenliğinin temel ilkelerini anlamak önemlidir. Güvenli bir oyun, düşmanca eylemleri öngören bir zihniyet üzerine inşa edilmiştir. Tek bir kod satırı yazmadan önce, bu temel ilkeleri içselleştirmeniz gerekir. Bu ilkeler, aldığınız her mimari ve tasarım kararını bilgilendirmelidir.
Müşteriye asla güvenmeyin
Bu, temel ilkedir. Kararlı bir sömürücü, yerel durumu ve ağ trafiğini tamamen kontrol eder. Sömürücüler bu düzeyde bir kontrole sahip olduğundan, istemci tarafında uygulamaya dayanan herhangi bir güvenlik önlemi sonunda aşılacaktır. Bu, Roblox'un bir sınırlaması değildir: bu, istemci-sunucu mimarilerinin temel bir gerçeğidir. İstemciden gönderilen her veri parçasının manipüle edildiğini, uydurulduğunu veya kötü niyetle gönderildiğini varsayın. Bu, aşağıdakileri içerir:
- İstemcide hiç çalışmasa bile, herhangi bir kopyalanmış LocalScript veya herhangi bir ModuleScript'i decompile etmek
- Karakterinin ve herhangi bir sabitlenmemiş parçanın ağ mülkiyetini almak
- Tüm mesafelerde veya sıklıklarda Touched olayları veya ProximityPrompt etkinleştirmeleri gibi istemci tarafından başlatılan olayları tetiklemek
- Oyuncunun konumunu, fiziğini veya dünya ile etkileşimlerini değiştirmek
- RemoteEvents ve RemoteFunctions'ı herhangi bir sıklıkta ve keyfi argümanlarla (ilk Player argümanı hariç) ateşlemek veya çağırmak
- Beklenen olayları tetiklemeksizin yerel DataModel'inde herhangi bir şeyi değiştirmek
- Yerel olarak çalışan herhangi bir kodun davranışını keyfi olarak değiştirmek
Bu nedenle, tüm kritik mantık sunucu tarafında doğrulanmalı veya yalnızca sunucuda çalıştırılmalıdır. Bu kontrolün sonuçları Ağ Mülkü, Hareket Doğrulama ve Fizik Sömürüleri ve Erişim Kontrolü ve Gizlilik belgelerinde ayrıntılı olarak açıklanmıştır.
Sunucu gerçekliğin kaynağıdır
Sunucu, tüm simülasyon durumları, kurallar, oyuncu ilerlemesi ve kritik kararlar için nihai gerçeklik kaynağı olmalıdır. İstemcinin rolü, dünyayı render etmek ve kullanıcı girdisini sunucuya göndermektir.
Sunucunun rolü:
- İstemciden girdi almak
- İstenen eylemin mümkün ve izin verilebilir olduğunu doğrulamak
- Eylemi gerçekleştirmek ve yetkili durumunu güncellemek
- Sonuçları tüm ilgili istemcilere çoğaltmak
Örneğin, bir oyuncu "Bir Bloxy Cola satın almak istiyorum" derse, sunucu, işlemi doğrulamadan ve onaylamadan önce, öğenin gerçek fiyatını, oyuncunun parasını ve oyuncu karakterinin dükkana olan fiziksel mesafesini bilmelidir. Mümkün olduğunca, doğrulanacak durum yalnızca sunucu tarafından korunmalı ve istemciler tarafından değil. Örneğin, Bloxy Cola işlemi onaylandığında, sunucu, oyuncunun parasından Bloxy Cola'nın fiyatını çıkarmalıdır; ancak sunucu, oyuncunun karakterini her zaman kontrol edemeyebilir.
Bu ilke, fizik ve hareket için bunu uygulayan bir motor özelliği olan sunucu yetkisi ile farklıdır. Sunucu yetkisi modeli ile sunucu, tüm oyun durumunu simüle eder ve istemciler yalnızca girdilerini gönderir, bu nedenle bir istemci kendi konumunu veya durumunu bildiremez. Bu, uçma veya hız hileleri gibi hilelerin tüm sınıflarını önler. Oynanışı duyarlı tutmak için, istemciler girdilerinin sonuçlarını tahmin eder ve sunucu, bir tahmin yanlış olduğunda bunları düzeltir. Yarışmalar, sporlar ve savaşlar gibi rekabetçi oyunlar için sunucu yetkisi modelini düşünün.
Tasarımda güvenlik
Güvenlik dikkate alımlarını oyununuzun tasarımına en başından entegre edin, daha sonra sonradan eklemeye çalışmak yerine.
- Her yeni özelliği tehdit modeli oluşturun. Her yeni özellik için sorun:
- Bir saldırgan, istemcisinin tam kontrolüne sahip olduğunda bunu nasıl sömürebilir?
- Bir istemci, özelliğin kullandığı herhangi bir parametre için herhangi bir değeri gönderebilse, en kötü olası sonuç nedir?
- Bu özellik, saniyede 1.000'den fazla kez kullanılırsa ne olur? Ne kadar maksimum hızda kullanılmalıdır?
- Bir sömürücü bunu başka bir oyuncunun deneyimini mahvetmek için kullanabilir mi?
- En kötü durumda, bu özellik ne kadar kaynak kullanabilir?
- Bu özellik için açığa çıkarmam gereken minimum iç bilgi veya durum nedir?
- Sorumlulukları erken bölün. Sunucu tarafında mantık ve verileri ilk günden itibaren ServerScriptService'de tutun. Bunları ReplicatedStorage veya Workspace gibi kopyalanan konteynerlere asla yerleştirmeyin.
Cihaz güveni
Bu sayfadaki ilkeler, bir oyuncunun katıldıktan sonra yaptığı şeylerden oyununuzu korur. Roblox ayrıca, oyuncunun katıldığı sırada cihazının güvenilir olup olmadığını kontrol eden ve size cihaz güven düzeyi olarak sonucu veren isteğe bağlı Cihaz Güveni API'si sağlar. Roblox, bu düzeye dayalı olarak herhangi bir işlem yapmaz. Oyununuza nasıl yanıt vereceğinize siz karar verirsiniz; örneğin, güven düzeyine göre oyuncuları ayrı yerlere gönderebilir, ticaret gibi hassas özellikleri yalnızca güvenilir cihazlara sınırlayabilir veya kontrolü geçemeyen oyuncuları reddedebilirsiniz. Bunu betiklerinizde kullanmaya başlamak için güven düzeyini okuyun.
Cihaz güveni, bu sayfadaki ilkeleri değiştirmez. Zayıf sunucu tarafı doğrulamasına dayanan sömürüler, güvenilir cihazlarda da çalışır, bu nedenle istemciyi güvensiz olarak değerlendirmeye ve önemli eylemleri sunucuda doğrulamaya devam edin.