Misalkan saya sedang melakukan permainan JavaScript, dan saya ingin permainan memperbarui server jika pengguna telah berhasil menyelesaikan permainan dan hasilnya.
Bagaimana saya memastikan bahwa permintaan datang dari permainan JavaScript, dan bahwa data yang dikirim belum dirusak. Saya menggunakan PHP sebagai bahasa sisi server.
Saya benar-benar mengerti bahwa tidak ada strategi yang 100% tahan terhadap kesalahan, dan tindakan apa pun yang diambil lebih merupakan pencegahan daripada perlindungan absolut.
Pada Edit: Seharusnya kita tidak menggunakan verifikasi server dari setiap langkah pengguna (seperti pada MMO tradisional). Gim ini bisa berupa gim mini sebagai bagian dari gim web atau gim edukasional (penyerbu luar angkasa atau gim real-time, misalnya) dan membutuhkan komponen sisi server agar setiap gim tersebut bisa membosankan.
Contoh: Misalkan, ketika permainan selesai, permintaan dikirim ke server melalui. AJAX
game_finished.php?user_id=1&outcome=success&score=88
Seorang pengguna dapat 'memalsukan' server dengan meyakini bahwa game telah selesai dengan benar dengan mengirimkan permintaan itu ke game_finished.php. Bagaimana ini bisa menjadi lebih sulit?
sumber
Anda dapat melakukannya dengan cara Warcraft: Gunakan Javascript hanya untuk mengirim perintah gerakan ke server, dan biarkan server menangani logika.
Ini masih membuat Anda terbuka untuk robot (program javascript yang memindahkan banyak hal lebih cepat daripada yang dimungkinkan secara manusiawi), tetapi itu adalah langkah besar dibandingkan membiarkan pintu terbuka pada trik /game_finished.php.
sumber
Jika Anda meminta klien menghitung skor, tidak ada cara untuk memvalidasinya di luar (seperti yang ditunjukkan) meminta server memutar ulang permainan untuk mengonfirmasi bahwa skornya sama.
Ada beberapa jenis permainan yang bisa Anda desain yang tidak berfungsi hanya berdasarkan skor numerik. Skrip sisi server dapat menghasilkan masalah matematika tambahan acak misalnya, dan ketika pengguna mengirimkan jawaban, skrip tersebut dapat membandingkan jawaban mereka dengan yang benar dan memberi skor pada sisi server.
Tetapi jika gim Anda adalah gim yang rumit (seperti contoh penyerbu luar angkasa), tidak banyak yang dapat Anda lakukan selain a) mempercayai klien, atau b) membiarkan server mengelola gim tersebut.
sumber
Ada banyak metode, tetapi semuanya akan gagal pada akhirnya. Anda dapat menambahkan beberapa nilai hash, atau kunci kueri yang diperbarui dengan setiap kueri.
Tetapi yang paling penting adalah, bahwa semua fungsi super encoding Anda dikirim sebagai kode sumber ke browser klien dan itu adalah masalah. Untuk membuatnya sedikit lebih sulit, Anda dapat menggunakan fungsi kirim dengan permintaan Ajax, sehingga sumber tidak akan tersedia di bawah url. Fungsi harus dikirim terkompresi, dan mungkin bahkan di bagian, sehingga akan lebih sulit untuk menyalin semuanya. Saya juga akan memeriksa kode ini di halaman seperti http://jsbeautifier.org/ jika setelah membuatnya mudah dibaca kode Anda mudah dimengerti.
sumber