จาวาสคริปต์ต่อต้านการโกงสำหรับเกมเบราว์เซอร์ / HTML5


35

ฉันวางแผนที่จะทำตัวละครแอ็คชั่นผู้เล่นคนเดียวใน js / html5 และฉันต้องการป้องกันการโกง ฉันไม่ต้องการการป้องกัน 100% เนื่องจากมันไม่ได้เป็นเกมที่มีผู้เล่นหลายคน แต่ฉันต้องการการปกป้องในระดับหนึ่ง

ดังนั้นกลยุทธ์ใดที่คุณแนะนำเกินกว่าจะย่อเล็กลงและทำให้งงงวย?

ฉันไม่อยากทำให้การตรวจสอบฝั่งเซิร์ฟเวอร์ง่าย ๆ แต่ฉันไม่ต้องการไปตามเส้นทาง Diablo 3 ที่ทำให้สถานะเกมของฉันเปลี่ยนแปลงไปตลอดเวลาที่ฝั่งเซิร์ฟเวอร์

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

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

มีอยู่หรือไม่เพื่อให้จาวาสคริปต์ตรวจสอบข้อความด้วยตนเองเช่นเดียวกับในเช็คซัม?

มีวิธีแก้ไขปัญหาเฉพาะเบราว์เซอร์หรือไม่ ฉันไม่สนใจที่จะ จำกัด เฉพาะ Chrome เท่านั้นในช่วงแรกของการสร้าง


ข้อมูลของคุณถูกบันทึกไว้ที่ไหนข้อมูลของคุณถูกบันทึกอย่างไร
DogDog

ตลกที่คุณพูดถึง Diable 3 "Diablo 1 way" เป็นสิ่งที่เชื่อใจลูกค้า ค้นหา google ถ้าคุณยังเด็กเกินไปที่จะจำสิ่งที่เกิดขึ้นเพราะสิ่งนั้น!
Valmond


Apoc ตอนนี้ฉันเพิ่งมีหลักฐานของแนวคิดและฉันไม่ได้ดำเนินการติดตาใด ๆ - แต่ฉันวางแผนที่จะใช้ฐานข้อมูล DB ในการสร้างครั้งแรกและ / หรือการจัดเก็บในท้องถิ่นเพื่อให้ผู้เล่นไม่สามารถเล่นจากที่พวกเขาทิ้งไว้ ใช่ Valdmond ฉันเล่น Diablo ของฉันแล้ว แต่ฉันไม่ได้สร้างเกมผู้เล่นหลายคนที่แข่งขันได้หรือ AAA ที่ถูกตั้งค่าสถานะเต็ม Byte56, ฉันไม่กังวลเกี่ยวกับการขโมยรหัสของฉัน (ใครจะต้องการอึนั้น?)
Billy Ninja

น่าเสียดายที่คุณต้องไปตามเส้นทาง diablo 3 หากคุณกังวลเกี่ยวกับแฮ็ก / กลโกงจริงๆ
Noob Game Developer

คำตอบ:


46

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

ข่าวดีก็คือว่าโดยทั่วไปมีการโกงน้อยมากในเกมผู้เล่นคนเดียว ข้อยกเว้นที่สำคัญเพียงอย่างเดียวสำหรับเกมที่มีชุมชน "youtube highscore" ขนาดใหญ่เช่น Line Rider ที่ผู้เล่นแข่งขันกันผ่าน YouTube

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

ฉันหวังว่าจะมีคำตอบที่ดีกว่านี้ แต่ไม่มี

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

  • ลดขนาดและทำให้งง JS ของคุณซึ่งจะทำให้รหัสอ่านยากขึ้น คุณสามารถลดขนาดและเรียงลำดับของ de-obfuscate แต่คุณไม่สามารถเรียกชื่อตัวแปรและฟังก์ชันที่ถูกต้องหรือข้อคิดเห็นได้
  • อบค่าด้วยภาษาอื่น ในกรณีนี้คุณสามารถใช้ PHP หรือภาษาฝั่งเซิร์ฟเวอร์อื่น ๆ เพื่อจัดการตัวแปรการตั้งค่าแบบคงที่ หากระยะทางกระโดดนั้นควรจะเป็น 2 ช่องว่างโดยปกติคุณจะต้องกำหนดระยะทางกระโดดสำหรับวัตถุผู้เล่น อย่าจัดการมันด้วย PHP เพื่อที่ว่าซอร์สโค้ดของ JS จะจบลงด้วย 2s ที่ฉาบไปทั่วโค้ดในสถานที่หลายล้านแห่ง นี่เป็นผลข้างเคียงที่มีความสุขเพิ่มเติมจากการที่สามารถเพิ่มความเร็วให้กับ JS ของคุณได้เช่นกัน
  • ด้วยการฝึกฝนคุณจะมีความเชี่ยวชาญในการผสมผสานและคุณยังสามารถสร้าง JS ของคุณเองสำหรับผู้เล่นแต่ละคนได้อีกด้วย ซึ่งเป็นอีกวิธีในการป้องกันการโกง หากรหัสของผู้เล่นแต่ละคนแตกต่างกันอย่างใดอย่างหนึ่งก็เป็นเรื่องยากที่จะเขียนสูตรโกงที่สามารถเป็นส่วนหนึ่งของชุดเครื่องมือ
  • ในที่สุดคุณสามารถตรวจสอบแหล่งที่มาตามตัวตนของผู้เล่น พูดที่อยู่ IP และ / หรือชื่อผู้ใช้ คุณรู้ว่า JS เวอร์ชั่นเฉพาะของผู้เล่นคืออะไรคุณสามารถอบในการตรวจสอบและต้องการให้มันเหมือนกันในส่วนอื่น ๆ ง่ายต่อการปิดการใช้งานเช่นเดียวกับ JS ฝั่งไคลเอ็นต์ แต่อีกครั้งทำให้ยากขึ้นเล็กน้อยในการสร้างชุดเครื่องมือ

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


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

@nightcracker คุณถูกต้องอย่างไรก็ตามแม้จะมีบางอย่างเช่น Line Rider หากคุณตรวจสอบหลังจากเกมเสร็จสิ้นวิดีโอก็ถูกสร้างขึ้นและ YouTubes ติดกับดักอยู่แล้ว คุณควรอัปโหลดแผนที่เมื่อผู้ใช้ไปที่การเล่น Hit คำนวณเส้นทางที่ไม่สำคัญแล้วส่งกลับ เกมดังกล่าวไม่สามารถคำนวณเส้นทางได้ (ถ้าเรากำลังพูดถึงการทำให้มันโกงพิสูจน์ซึ่งเกมนั้นไม่ใช่มันง่ายพอที่การโกงนั้นชัดเจนสำหรับแฟน ๆ )
DampeS8N

14

ฉันได้ตอบคำถามแบบนี้แล้วและขอโทษที่จะบอก แต่

ฉันไม่อยากทำให้การตรวจสอบฝั่งเซิร์ฟเวอร์ง่าย ๆ แต่ฉันไม่ต้องการไปตามเส้นทาง Diablo 3 ที่ทำให้สถานะเกมของฉันเปลี่ยนแปลงไปตลอดเวลาที่ฝั่งเซิร์ฟเวอร์

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

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

มันดีสำหรับคุณสำหรับรหัสของคุณสำหรับผู้ใช้ของคุณและสำหรับชุมชน


3
+1 สำหรับเซิร์ฟเวอร์อำนาจมันก็ไม่ทำงานถ้าคุณพยายามที่จะไว้วางใจของลูกค้า ...
Valmond

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

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

ใช่ฉันเข้าใจแล้ว แต่ฉันทำโครงการเป็นงานอดิเรกในเวลาว่างเล็ก ๆ น้อย ๆ ที่ฉันมี การทำการตรวจสอบเซิร์ฟเวอร์ชนิดนั้นจะทำให้โครงการมีความซับซ้อนเป็นอย่างมากทำให้ไม่น่าเชื่อถือ ฉันจะเดินหน้าต่อไปเรื่อย ๆ กับโครงการที่รู้เรื่องนั้นและถ้ามันเริ่มมีขนาดใหญ่และจริงจังกว่าที่ฉันจะสามารถควบคุมฝั่งเซิร์ฟเวอร์อย่างจริงจังได้อาจเป็นกับ Node.js
Billy Ninja

นี่เป็นคำตอบที่เหมาะสมสำหรับ OP
Noob Game Developer

3

จุดเริ่มต้นที่ดีคือการใช้ฟังก์ชัน Object.freeze (ซึ่งจะช่วยป้องกันการแก้ไขวัตถุ)

สิ่งนี้ "ป้องกันไม่ให้มีการเพิ่มคุณสมบัติใหม่", "ป้องกันไม่ให้ลบคุณสมบัติที่มีอยู่", "ป้องกันคุณสมบัติที่มีอยู่หรือคุณสมบัติที่นับไม่ได้, การกำหนดค่าหรือการเขียนได้"; การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับสถานะภายในควรทำผ่าน accessors ตัวอย่างต่อไปนี้ใช้งานได้กับ chrome (ควรทำงานกับ firefox ฉันไม่รู้เกี่ยวกับ IE แม้ว่า ... ):

var b = {}
// Fill your object with whatever you want
b.a = "ewq"
// Freeze all changes
Object.freeze(b)
// Try to put new value. This wont throw any error, put wont work either, 
// as we shall see ...
b.b = "qwe"

// Values 
console.log(b.a); // outputs "eqw"
console.log(b.b); // outputs  undefined

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

@ DampeS8N ใช่ฉันคิดว่าคุณพูดถูก
นิทาน

เหมือนที่ผมกล่าวใน OP ที่ฉันต้องการเพียงแค่บางระดับของการป้องกัน
Billy Ninja

สิ่งนี้จะไม่ช่วยเลย! ผู้ใช้สามารถตั้งค่าเบรกพอยต์ดีบักเกอร์ในฟังก์ชัน JS แรกซึ่งได้รับการดำเนินการและป้อนObject.freeze = function(o) {};ในคอนโซล JS
ฟิลิปป์

2

น่าเสียดายที่คุณต้องไปตามเส้นทางของ diablo 3 หากคุณกังวลเกี่ยวกับการแฮ็ก / กลโกง หากคุณไม่ใช่การตรวจสอบขั้นพื้นฐานที่คุณต้องทำหรือแนะนำอย่างยิ่งให้ทำ

  • ตรวจสอบการซื้อ - ถ้าฉันกำลังซื้ออะไรฉันควรมีทองคำเพียงพอ
  • sellchecks - ถ้าฉันขายอะไรฉันต้องมีรายการนั้นในการตรวจสอบการค้าสินค้าคงคลังของฉัน - เช่นเดียวกับขายอาวุธ
  • ตรวจสอบอุปกรณ์ - หากฉันเตรียมอาวุธฉันมี / เป็นเจ้าของหรือไม่
  • การตรวจสอบความเสียหาย - ถ้าฉันโจมตีบางสิ่ง (ศัตรู) ฉันไม่สามารถโจมตีได้มากกว่าความเสียหายสูงสุดที่อาวุธของฉันทำได้ (ที่นี่คุณไม่ควรคาดหวังให้ลูกค้าบอกว่าเขาใช้อาวุธชนิดใดเพราะควรได้รับการยืนยันก่อนหน้านี้)
  • การตรวจสอบการประดิษฐ์ - หากฉันประดิษฐ์บางอย่างฉันต้องมีส่วนผสม / ส่วนประกอบทั้งหมดหรือไม่

... และต่อไป

1 คะแนนเป็นเรื่องยากเล็กน้อยสำหรับตำแหน่งของฮีโร่เนื่องจากคุณไม่ได้กังวลมากนักคุณสามารถทิ้งมันไว้ได้ แต่คุณควรทำเช่นนั้นด้วยการตรวจสอบขั้นต่ำเช่นเดียวกับที่ด้านล่าง

  • ฉันอยู่ที่ place1 @ T1 ฉันอยู่ที่ place2 T2 เวลาขั้นต่ำในการเดินทางจาก place1 ถึง place2 คือเท่าไหร่และตรงกับ T2 - T1 ของฉัน คุณสามารถทำแผนที่สิ่งนี้จากเล็กไปใหญ่ขึ้นอยู่กับขนาดของแผนที่ คุณควรมีรายชื่อพื้นที่สำคัญอย่างน้อยเช่น NPC - boss, NPC - พื้นที่วางไข่ของศัตรู (ไม่จำเป็นต้องมีตำแหน่งแน่นอน)

หวังว่านี่จะช่วยได้มันฟังดูยาก แต่คุณต้องเรียนรู้ที่จะสร้างเกมทำงานจริง


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

1

มันเป็นไปไม่ได้ มันจะง่ายมากที่จะหลีกเลี่ยงสิ่งที่คุณทำเพื่อป้องกันการโกง

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

นอกจากนี้หากพวกเขาต้องการโกงให้พวกเขา พวกมันแค่ทำลายเกมให้ตัวเอง ไม่มีการใช้งานจริงในการโกงในสถานการณ์นี้คุณเพียงแค่ทำลายการเล่นเกมด้วยตัวคุณเอง


1

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

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

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


ฉันจะระวัง สิ่งสุดท้ายที่คุณต้องการทำคือการห้ามลูกค้าที่ชำระเงินโดยไม่ได้ตั้งใจ
John McDonald

@JohnMcDonald True ว่า บางทีแค่ฆ่ารุ่นต้นฉบับนั้น ด้วยวิธีนี้หากพวกเขาตั้งใจเรียกกับดักพวกเขาเพียงแค่ต้องรีเฟรชเบราว์เซอร์ในขณะที่ยังทำให้แฮกเกอร์ถอดรหัสแฮ็คทั้งหมด
AJMansfield

0

ใช่มันไม่สามารถได้อย่างเต็มที่ที่จะทำได้ ตรวจสอบเซิร์ฟเวอร์เสมอ สิ่งใดก็ตามที่มีผลกระทบต่อเกมควรต้องได้รับอนุญาตจากเซิร์ฟเวอร์

นั่นคือส่วนขยายที่ฉันจะทำซ้ำคำตอบอื่น ๆ

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

ด้วยที่กล่าวว่า:

  • บรรเทาลูกค้าคร่าวๆ: ใช้ HTTPS ใช้การแบ่งปันทรัพยากรข้ามแหล่ง (CORS) อนุญาตเฉพาะแหล่งกำเนิดเดียวกันใช้แหล่งข้อมูลย่อยที่สมบูรณ์ ฉันแนะนำให้ใช้พนักงานบริการเพื่อบังคับใช้กับคำร้องขอทั้งหมดซึ่งหมายความว่าเกมจะไม่ทำงานเพียงแค่ย้ายไปที่ HTTP (เนื่องจากไม่มี HTTPS ไม่มีพนักงานบริการคนงานเซิร์ฟเวอร์กำลังทำหน้าที่เป็นส่วนหนึ่งของลูกค้า CORS และเซิร์ฟเวอร์คาดหวัง CORS) และหากพวกเขาให้บริการผ่าน HTTPS มันจะไม่ทำงานเพราะเซิร์ฟเวอร์จะปฏิเสธที่มาอื่น
  • ลดการเขียนสคริปต์: ใช้การรับรองความถูกต้องและต้องการโทเค็นเพื่อดำเนินการใด ๆ รอบการอัปเดตแต่ละครั้งที่เซิร์ฟเวอร์ควรให้โทเค็นใหม่แก่ลูกค้าและโทเค็นถูกใช้งานโดยทำทุกอย่างที่มันทำ ... การทำสิ่งใดต้องใช้โทเค็นที่ถูกต้องโทเค็นจะเปลี่ยนแปลงอยู่ตลอดเวลา ส่งโทเค็นเดียวกันสองครั้งหรือส่งโทเค็นผิดเซิร์ฟเวอร์รู้ว่ามีบางอย่างเกิดขึ้น เพื่อการป้องกันพิเศษ: สร้าง Message authentication code (MAC) ของโทเค็นด้วยรหัสลับและเพิ่มลงใน te cookie การแก้ไขคุกกี้จะฆ่าเซสชัน (และพวกเขาจำเป็นต้องเดาคีย์) และการแก้ไขโทเค็นจะทำให้การตรวจสอบ MAC ล้มเหลว
  • บรรเทาการแก้ไขโค้ด: นอกเหนือจากความสมบูรณ์ของแหล่งข้อมูลย่อย (ซึ่งเบราว์เซอร์ที่ทันสมัยจะตรวจสอบในรันไทม์), รักษาตัวแปรของคุณภายใต้ขอบเขตที่ จำกัด นอกจากนี้ไม่ต้องพึ่งพา DOM (DOM นั้นใช้สำหรับ IO เท่านั้นไม่ใช่หน่วยเก็บข้อมูลหากคุณต้องการแนบแอ็ตทริบิวต์ห่ออ็อบเจ็กต์ DOM ของคุณและเพิ่มลงใน wrappers) ด้วยวิธีนี้สิ่งที่คุณใช้บนคอนโซลไม่สามารถเข้าถึงตรรกะของเกมได้ (เว้นแต่คุณจะใช้ช่องโหว่ของเบราว์เซอร์) คุณอาจพิจารณาใช้เทคนิคในการตรวจสอบเครื่องมือของนักพัฒนาซอฟต์แวร์ (นี่คือเฉพาะสำหรับแต่ละเบราว์เซอร์และอาจไม่ทำงานในทุกกรณีหรือหยุดทำงานในอนาคต ... ดังนั้นนี่คือการแข่งขันทางอาวุธ)
  • มีบางอย่างเกิดขึ้น เซสชันหยุดพักหรือไม่ เตะผู้เล่นจากแมตช์ปัจจุบันขอเข้าสู่ระบบอีกครั้ง ลองพิจารณา captcha ... ที่มีประโยชน์ในการบอกผู้ใช้ว่า"เรารู้ว่ามีบางอย่างเกิดขึ้น" (ไม่ใช่ความล้มเหลวของเซิร์ฟเวอร์แบบสุ่ม) และใช่นั่นเป็นรูปแบบหนึ่งของการบรรเทา โอ้และไม่ต้องมีหมอกลงเพื่อเข้าสู่ระบบเหล่านี้ คุณต้องสามารถตรวจสอบสาเหตุที่เกิดขึ้นได้ทั้งเพื่อป้องกันการโพสต์ที่ผิดพลาดและเพื่อรับตั๋วสนับสนุน

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

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