เครื่องมือปิดบังโค้ด JavaScript

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

วิธีการปิดบังโค้ด JavaScript

  1. 1

    วางแหล่งที่มา

    โค้ด JavaScript ที่ถูกต้องทุกชนิด หากโค้ดนี้ต้องการใช้ชื่อคุณสมบัติระดับโลกเฉพาะจากหน้าโฮสต์ ให้กำหนดชื่อเหล่านั้นเป็นชื่อสำรอง

  2. 2

    เทคนิคการเลือก

    การเข้ารหัสสตริง (hex / base64) การบิดเบือนตัวระบุ การทำให้ลำดับการควบคุมการทำงานราบเรียบ การแทรกโค้ดที่ไม่จำเป็น และตัวห่อโค้ดที่สามารถป้องกันตนเองได้

  3. 3

    เลือกโปรไฟล์เป้าหมาย

    เบราว์เซอร์ที่รองรับมาตรฐาน ES5 โดยไม่ใช้ API ของ Node.js; Node.js รองรับ `require` และ `Buffer`; หรือระดับต่ำ (ส่วนใหญ่เป็นการย่อขนาดโค้ด)

  4. 4

    ทำให้ข้อมูลไม่ชัดเจน

    เครื่องมือนี้จะแสดงโค้ดที่ถูกแปลงแล้วพร้อมค่าขนาดเพิ่มเติม (delta) โดยการตั้งค่าที่เข้มงวดอาจทำให้ขนาดของผลลัพธ์ใหญ่กว่าโค้ดต้นฉบับถึง 3–5 เท่า

เทคนิคต่างๆ และค่าใช้จ่ายที่เกี่ยวข้อง

เทคนิค เพิ่มความพยายามของผู้โจมตี ต้นทุนในการรัน ต้นทุนด้านขนาด
การเปลี่ยนชื่อตัวแปร ต่ำ ไม่มีนัยสำคัญ น้อยกว่า (ลดผลข้างเคียง)
การเข้ารหัสอาร์เรย์สตริง ระดับปานกลาง ระดับต่ำมาก (ตรวจสอบแต่ละสตริงเพียงครั้งเดียว) +10–30%
การปรับรูปแบบการไหลของกระบวนการควบคุม สูง วัดได้ (~2–5%) +50–150%
การแทรกโค้ดที่ไม่ใช้งานจริง ระดับต่ำ (เพื่อสร้างภาพลักษณ์ด้านความปลอดภัย) มีขนาดเล็ก เพิ่มขึ้น 20–50%
บรรจุภัณฑ์สำหรับการป้องกันตนเอง ขนาดกลาง ใช้ครั้งเดียว +5–10%
การป้องกันการดีบัก ระดับปานกลาง (ตรวจจับ DevTools) ตรวจสอบเพียงครั้งเดียว เพิ่มขึ้น 5%
VM / การจำลองเสมือน (ระดับพรีเมียม) สูงมาก ขนาดใหญ่ (5–20 เท่า) เพิ่มขึ้น 300–500%

สิ่งใดที่การปิดบังไม่สามารถปกป้องได้

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

เมื่อการปิดบังข้อมูลนั้นคุ้มค่า

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

เมื่อกลับกลายเป็นผลเสีย

  • คุณมีโปรแกรมบันเดิลแล้ว Webpack และ Terser ในโหมดการใช้งานจริงสามารถลดขนาดไฟล์และปรับโครงสร้างข้อมูลในไฟล์ท้องถิ่นได้โดยอัตโนมัติ การเพิ่มขั้นตอนการปิดบังข้อมูลเพิ่มเติมจะไม่ก่อให้เกิดประโยชน์มากนัก และยังทำให้ขนาดของไฟล์บันเดิลเพิ่มขึ้นอีกด้วย
  • คุณกำลังปรับแต่งให้เหมาะสมสำหรับค่า First-Paint และ Core Web Vitals โดยการใช้เทคนิคการบดบังข้อมูลอย่างเข้มข้นจะทำให้ขนาดของไฟล์เพิ่มขึ้นเป็นสามเท่า ซึ่งส่งผลเสียต่อค่า FCP และ LCP
  • คุณจำเป็นต้องดำเนินการดีบักในสภาพแวดล้อมจริง (production) เนื่องจากการเข้ารหัสข้อมูลอย่างเข้มข้นจะทำให้ข้อมูลการติดตามการทำงานของ Sentry Stack เกือบไร้ประโยชน์หากไม่มีแผนที่ต้นทางที่สอดคล้องกัน และการเผยแพร่แผนที่ต้นทางนั้นก็เท่ากับการทำลายประสิทธิภาพของการเข้ารหัสข้อมูลไปโดยตรง

ข้อผิดพลาดที่พบบ่อย

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

คำถามที่พบบ่อย

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

หากคุณเข้าถึงคุณสมบัติแบบไดนามิก (obj["field_name"], Object.keys(obj)) หรือพึ่งพาชื่อฟังก์ชัน/คลาสเฉพาะสำหรับหน้าโฮสต์ ให้เพิ่มชื่อเหล่านั้นลงในรายการที่สงวนไว้ หากไม่ทำเช่นนี้ การเปลี่ยนชื่อคุณสมบัติอาจทำให้ระบบการผสานการทำงานภายนอกทำงานผิดพลาดได้

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

การปิดบังแบบเบาจะเพิ่มขนาดขึ้นประมาณ 10–30% การปรับรูปแบบการไหลของควบคุมร่วมกับการใช้อาร์เรย์สตริงจะเพิ่มขนาดอีก 50–150% และในกรณีที่ตั้งค่าอย่างเข้มงวดที่สุด ขนาดอาจเพิ่มขึ้นถึงสามเท่า โปรดตรวจสอบตัวนับขนาดผลลัพธ์ก่อนส่งมอบ

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือนี้มีให้บริการในภาษาอื่น