ฉันจะป้องกันการส่งคะแนนจากเกม HTML5 ไปยังเซิร์ฟเวอร์ของฉันได้อย่างไร


13

ในแบ็กเอนด์ฉันใช้จาวา ฉันมีเกมใน HTML5; เมื่อผู้ใช้เสร็จสิ้นฉันส่งการโทร Ajax เพื่อบันทึกคะแนนไปยังฐานข้อมูล ตอนนี้บางคนสามารถใช้เครื่องมืออย่าง Fiddler และ firebug เพื่อแก้ไขคำขอ ajax นี้และส่งคะแนนที่ดีขึ้นไปยังเซิร์ฟเวอร์ ฉันจะแน่ใจได้อย่างไรว่าผู้ใช้ไม่สามารถจัดการกับคะแนน!

คำตอบ:


18

อย่าเพียงส่งคะแนนเต็มไปยังเซิร์ฟเวอร์ ส่งชุดเกมสถิติที่สามารถใช้ในการตรวจสอบคะแนนที่เป็นจริง หรือคุณสามารถใช้คีย์ที่แบ่งปันล่วงหน้าบางตัวเพื่อคำนวณคะแนน คุณสามารถส่งคะแนนและสถิติที่เพิ่มขึ้นตลอดทั้งเกมและให้แน่ใจว่าการเพิ่มนั้นสมเหตุสมผล

อย่างไรก็ตามฉันไม่ต้องกังวลกับมันมากนัก คำแนะนำข้างต้นจะทำให้ยากขึ้น แต่ไม่สามารถส่งคะแนนปลอมได้ อย่างไรก็ตามหากคุณทำให้คนส่วนใหญ่ที่เล่นเกมของคุณยากเล็กน้อยจะไม่สนใจที่จะพยายามโกงมัน

ระมัดระวังเกี่ยวกับวิธีที่คุณอนุญาตให้เกมสื่อสารกับเซิร์ฟเวอร์ของคุณ คุณไม่ต้องการให้เกมของคุณเป็นจุดเริ่มต้นในเซิร์ฟเวอร์ของคุณเพื่อแฮ็ค ตรวจสอบให้แน่ใจว่าคุณตรวจสอบความถูกต้องของข้อมูลเสมอและไม่ไว้วางใจลูกค้า


6
ดูprogrammers.stackexchange.com/questions/150127/ …และgamedev.stackexchange.com/questions/37392/…เพื่อให้สมบูรณ์ด้วย "ไม่ไว้วางใจลูกค้า"
dievardump

@ Byte56 ไม่มีรูปแบบของการทำให้งงงวยหรือการเข้ารหัสจะปกป้องรหัสของคุณจากการดีบักเกอร์ที่ใช้ในการแก้ไขข้อมูลเกมในระหว่างการเล่น หากการเล่นเกมเกิดขึ้นกับลูกค้ามันเป็นไปไม่ได้ที่จะป้องกันการโกงแบบนี้ เบราว์เซอร์ที่เปิดใช้งาน Javascript ไม่ใช่อุปกรณ์คำนวณที่เชื่อถือได้
MarkR

10

ในฐานะที่เป็น Byte56 กล่าวว่า: "ไม่เคยเชื่อถือลูกค้า" แต่:

ไม่เชื่อใจลูกค้าในราคา:
การมีเกมทั้งหมดที่เล่นบนเซิร์ฟเวอร์จะเพิ่มต้นทุนโครงสร้างพื้นฐานของคุณเป็นจำนวนมาก

สมมติว่าผู้เล่นส่วนใหญ่จะไม่โกง
และคะแนนสูงสุดด้านบนจะตัดสินหลังจากเวลาเล็กน้อยและหยุดการเปลี่ยนแปลงมาก

มีทางกลาง

บันทึกเกม (บนไคลเอนต์)
(ขึ้นอยู่กับประเภทของเกมที่อาจจะง่ายสุด ๆ (เช่นหมากรุก) หรือซับซ้อนเล็กน้อย (เช่น FPS แบบผู้เล่นหลายคน)
แต่มันทำได้เสมอ)

เมื่อผู้เล่นจบเกมเพียงส่งคะแนน
หากคะแนนอยู่ในช่วงที่กำหนดที่ด้านบน (เช่นด้านบน 1% หรือ 5 อันดับแรก)
ขอข้อมูลที่บันทึกไว้จากผู้เล่น
และเล่นเกมนั้นซ้ำบนเซิร์ฟเวอร์
หากคะแนนตรงกันให้ยอมรับคะแนน

วิธีนี้คุณไม่ต้องการทรัพยากรด้านเซิร์ฟเวอร์เพิ่มเติมสำหรับการเล่นส่วนใหญ่
แต่สามารถมั่นใจได้ว่าคะแนนสูงสุดนั้นถูกต้อง


2
ในคำอื่น ๆ ที่ใส่ใจถ้าพวกเขาโกงเพื่อสิ่งอื่นนอกเหนือจากคะแนนสูงสุด
jhocking

4

ไม่ต้องเป็นห่วงนะ; การปกป้องจากการโจมตีทั้งหมดนั้นเป็นไปไม่ได้ถ้าคุณเชื่อใจลูกค้า หากไม่มีใครใช้ Fiddler และอื่น ๆ เพื่อแก้ไขคำขอ AJAX พวกเขาสามารถทำการดีบัก JS และแก้ไขข้อมูลเกมของคุณเพื่อให้ชีวิต 1000 ตัว ฯลฯ หรือแก้ไขรหัสของคุณหรือทำสิ่งอื่น ๆ ที่คุณไม่เคยคิด

ฉันเขียนเกมดังกล่าวเมื่อหลายปีก่อนและเพื่อความรู้ที่ดีที่สุดของฉันไม่มีใครโกงด้วยวิธีนี้ ไม่มีรางวัลยกเว้นมีชื่อของคุณในตารางคะแนน


4

ลดแรงจูงใจทางสังคมในการโกงเช่นใช้กระดานผู้นำทางสังคม (การโกงจะทำให้คุณดูดีต่อเพื่อนไม่มากก็ไม่ได้ทำให้เสียทุกคน)

ตรวจสอบบนเซิร์ฟเวอร์ Joel Poloney มีเทคนิคดีๆใน Game Developer 2012 กันยายน"Scale Your Online Game"


2

เมื่อคุณต้องการสร้างเกมออนไลน์ที่ป้องกันการโกงคุณต้องจัดการกับตรรกะของเกมทั้งหมดบนเซิร์ฟเวอร์ ทุกสิ่งที่เกิดขึ้นในฝั่งไคลเอ็นต์สามารถควบคุมและจัดการโดยผู้ใช้ มีเทคนิคต่าง ๆ เช่นการเข้ารหัสหรือการทำให้งงงวยคุณสามารถลองได้ แต่ในท้ายที่สุดมันก็แค่ความปลอดภัยผ่านความสับสนซึ่งคนอื่น ๆ สามารถตัดสินใจได้อย่างเพียงพอ

แน่นอนว่าเกมที่ทำงานบนเซิร์ฟเวอร์นั้นมีความซับซ้อนมากในการพัฒนาต้องใช้ทรัพยากรมากขึ้นด้านเซิร์ฟเวอร์และความหน่วงแฝงของเครือข่ายเป็นอันตรายต่อประสบการณ์เกม (โดยเฉพาะอย่างยิ่งสำหรับเกมที่มีความเร็วสูง) ป้องกันผู้เล่นจากการโกง


แม้นั่นจะไม่ป้องกันการโกงทั้งหมด - เพียงแค่ "ใช่ฉันเข้าใจถูกต้องมีคะแนนพันล้าน" เนื่องจากมีบางสิ่งที่ต้องทำงานกับไคลเอนต์พวกเขาจึงลงเอยด้วยการควบคุมบางอย่างโดยไม่คำนึงถึง อย่างน้อยที่สุดลูกค้าใด ๆ โดยเฉพาะเว็บเบราว์เซอร์สามารถใช้สคริปต์ได้
cHao
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.