Saya berencana menjelajah membuat aksi pemain tunggal rpg di js / html5, dan saya ingin mencegah kecurangan. Saya tidak membutuhkan perlindungan 100%, karena ini tidak akan menjadi permainan multipemain, tetapi saya ingin beberapa tingkat perlindungan.
Jadi strategi apa yang Anda sarankan di luar minify dan kebingungan?
Saya tidak akan repot-repot membuat pengecekan sisi server sederhana, tapi saya tidak ingin mengikuti jalur Diablo 3 menjaga semua perubahan kondisi permainan saya di sisi server.
Karena ini akan menjadi semacam rpg saya datang dengan ide membuat inspektur statistik yang memeriksa perubahan tiba-tiba dalam nilai-nilai mereka, tapi saya tidak yakin bagaimana itu konsisten dan dapat dipercaya itu bisa.
Bagaimana dengan variabel dan fungsi eskop? Bekerja pada eskop yang lebih kecil jika mungkin lebih aman, tetapi sepadan dengan usaha?
Apakah ada javascript untuk memeriksa sendiri teksnya, seperti dalam checksum?
Ada solusi khusus browser? Saya tidak akan repot-repot menahannya untuk Chrome hanya di build awal.
sumber
Jawaban:
Jawaban singkatnya adalah Anda tidak bisa melakukannya. Apa pun yang menjalankan sisi klien, terutama dari sumber, dapat dimodifikasi untuk mengalahkan taktik Anda secara sepele. Jika Anda menempatkan pemeriksa sisi klien untuk mencari perubahan mendadak, pengguna hanya dapat menonaktifkan pemeriksa.
Berita baiknya adalah, pada umumnya, ada sedikit kecurangan pada permainan pemain tunggal. Satu-satunya pengecualian utama adalah untuk game yang memiliki komunitas "youtube highscore" besar seperti Line Rider, di mana para pemain saling bersaing melalui YouTube.
Jika Anda bertujuan untuk itu, atau terlalu keras kepala untuk menerima bahwa orang mungkin curang dalam permainan, atau menjaga skor tinggi Anda sendiri (yang merupakan bentuk multiplayer) maka yang harus Anda lakukan adalah semua perhitungan di sisi server . Ya, semua yang penting. Anda bahkan tidak dapat mengulangi sisi perhitungan klien untuk mencoba memberikan skor kepada pengguna dan kemudian 'memverifikasi' dengan server karena pengguna kemudian dapat menonaktifkan centang dan menonaktifkan sistem yang memastikan ada pemeriksaan.
Saya berharap ada jawaban yang lebih baik untuk ini, tetapi tidak ada.
Yang mengatakan, ada hal-hal yang dapat Anda lakukan untuk membuatnya sedikit lebih sulit untuk menipu. Mereka tidak akan menghentikan siapa pun yang serius melakukannya dan melepaskan toolkit untuk menipu, tetapi itu akan memperlambat mereka:
Begitu. Seperti yang Anda lihat, mungkin tidak layak untuk menempuh rute ini. Itu susah. Membutuhkan banyak praktik pengkodean yang benar-benar konyol untuk dilakukan, dan pada akhirnya masih relatif mudah dikalahkan. Anda harus melakukan semua sisi server perhitungan untuk mencegah kecurangan. Atau lepaskan, dan terimalah kecurangan itu akan terjadi.
sumber
Saya sudah menjawab pertanyaan seperti itu di sini , dan saya minta maaf untuk mengatakan tetapi:
Adalah hal terburuk yang bisa Anda katakan di sini. Jika Anda ingin melakukan mesin "anti-cheat", Anda harus melakukannya. Anda dapat menambahkan apa pun yang Anda inginkan di sisi klien, untuk memudahkan pekerjaan di sisi server, tetapi Anda tidak boleh mempercayai klien. Semua Logika yang Anda miliki harus setidaknya sisi server. Anda dapat mereproduksi sisi klien jika Anda mau, tetapi tidak ada solusi sisi klien saja yang akan melakukannya.
Omong-omong, jika Anda ingin menemukan kelemahan program Anda, jangan mengaburkannya, biarkan orang melihat kode Anda dan memberi tahu Anda "di sini, Anda memiliki masalah".
Itu baik untuk Anda, untuk kode Anda, untuk pengguna Anda dan untuk komunitas.
sumber
Nah, tempat yang baik untuk memulai adalah dengan menggunakan fungsi Object.freeze (yang akan memungkinkan perlindungan terhadap penambalan objek).
Ini "mencegah properti baru ditambahkan", "mencegah properti yang ada dihapus", "mencegah properti yang ada, atau enumerabilitas, konfigurabilitas, atau kemampuan menulis, dari diubah"; setiap perubahan pada keadaan internal harus dilakukan melalui pengakses. Contoh berikut berfungsi di chrome (harus bekerja di firefox, saya tidak tahu tentang IE ...):
sumber
Object.freeze = function(o) {};
di konsol JS.Sayangnya, Anda harus mengikuti jalan diablo 3, jika Anda benar-benar khawatir tentang peretasan / cheat. jika tidak, maka cek dasar yang harus Anda lakukan atau sangat disarankan untuk dilakukan.
... dan seterusnya
1 poin sedikit rumit adalah posisi pahlawan, karena Anda tidak terlalu khawatir tentang hal itu, Anda dapat meninggalkannya, tetapi lebih baik Anda melakukannya juga dengan cek minimum seperti di bawah ini
Semoga ini bisa membantu, kedengarannya sulit tetapi Anda harus belajar membuat game yang benar-benar berfungsi
sumber
Ini pada dasarnya tidak mungkin. Akan sangat mudah untuk mengatasi apa pun yang Anda tempatkan untuk mencegah kecurangan.
Masalahnya adalah dengan perangkat lunak apa pun yang Anda distribusikan orang dapat memodifikasinya dengan mudah.
Selain itu jika mereka ingin menipu, biarkan mereka. Mereka hanya merusak game untuk diri mereka sendiri. Tidak ada penggunaan praktis nyata untuk menipu dalam situasi ini, Anda hanya akan menghancurkan gameplay untuk diri sendiri.
sumber
Saya punya ide untuk tindakan yang dapat Anda ambil untuk mencegah / mengurangi kecurangan (selain jawaban lain). Anda dapat mengaturnya agar klien tidak diberikan semua kode sumber pada satu waktu, melainkan setiap kali klien ingin, katakanlah, membeli item baru di toko, sehingga klien harus mengirim informasi tertentu ke server, dan hanya menerima semua informasi untuk apa pun yang mereka beli jika informasi semua sesuai dengan apa yang seharusnya. Jika tidak, server membuat daftar hitam IP mereka atau sesuatu.
Anda dapat menggunakan ini bersamaan dengan apa yang dikatakan Dampes8n tentang menggunakan versi sumber yang berbeda, bahwa jika Anda dapat menemukan cara untuk menghasilkan banyak versi yang berbeda, sehingga setiap pengguna akan menjalankan versi sumber yang sama sekali berbeda setiap kali, yang gagal periksa daftar hitam bahwa versi sumber, juga, bahwa itu tidak akan pernah memberikan info item yang benar untuk versi sumber itu lagi.
Alasan utama ini akan efektif adalah bahwa jika seorang hacker tidak mendapatkan hack yang benar pertama kali, ini akan membuat mereka lebih sulit untuk memodifikasi hack, karena setiap kali hack tidak bekerja dengan sempurna, mereka harus ganti IP mereka dan tulis hack sekali lagi untuk versi sumber baru.
sumber
Ya, itu tidak bisa sepenuhnya dilakukan. Selalu periksa di server. Apa pun yang berdampak pada permainan harus memerlukan otorisasi dari server.
Itu adalah batas di mana saya akan mengulangi jawaban lain.
Namun, kita dapat melakukan lebih banyak pada akhir mencegah penipuan daripada hanya memeriksa di server. Yah, kita mungkin harus menambahkan beberapa pemeriksaan server khusus. Namun, perlu diketahui bahwa pemeriksaan sisi klien tidak berharga, mereka menghemat bandwidth dan kerja server ketika curang tidak terlibat.
Dengan mengatakan:
Ya, ini semua adalah mitigasi. Kami masih dapat memiliki browser yang dibuat khusus yang tidak akan memeriksa integritas dan membiarkan Anda menjangkau dan mengacaukan variabel dalam lingkup lokal ... maka kode game akan mengirim data yang dimodifikasi dengan token yang tepat, dan di situlah server melakukan pemeriksaan server. bermain.
sumber