เครื่องมือปิดบังโค้ด JavaScript
การปิดบังโค้ดจะเพิ่มต้นทุนในการอ่านซอร์สโค้ด JavaScript ของคุณ, แม้ไม่ใช่ในระดับสูงสุด (การปิดบังโค้ดฝั่งผู้ใช้ไม่สามารถป้องกันได้อย่างสมบูรณ์) แต่ก็เพียงพอที่จะทำให้ผู้อ่านไม่สนใจตรวจสอบอย่างละเอียด และชะลอกระบวนการสกแรปอัตโนมัติ เครื่องมือนี้ใช้เทคนิคต่างๆ เช่น การเข้ารหัสข้อมูลแบบสตริง-อาร์เรย์ การเปลี่ยนแปลงรูปแบบของตัวระบุ การปรับโครงสร้างการควบคุมโปรแกรมให้เรียบง่าย และการแทรกโค้ดที่ไม่จำเป็น โดยสามารถเลือกใช้แต่ละเทคนิคตามระดับความเข้มข้นที่ต้องการ
วิธีการปิดบังโค้ด JavaScript
-
1
วางแหล่งที่มา
โค้ด JavaScript ที่ถูกต้องทุกชนิด หากโค้ดนี้ต้องการใช้ชื่อคุณสมบัติระดับโลกเฉพาะจากหน้าโฮสต์ ให้กำหนดชื่อเหล่านั้นเป็นชื่อสำรอง
-
2
เทคนิคการเลือก
การเข้ารหัสสตริง (hex / base64) การบิดเบือนตัวระบุ การทำให้ลำดับการควบคุมการทำงานราบเรียบ การแทรกโค้ดที่ไม่จำเป็น และตัวห่อโค้ดที่สามารถป้องกันตนเองได้
-
3
เลือกโปรไฟล์เป้าหมาย
เบราว์เซอร์ที่รองรับมาตรฐาน ES5 โดยไม่ใช้ API ของ Node.js; Node.js รองรับ `require` และ `Buffer`; หรือระดับต่ำ (ส่วนใหญ่เป็นการย่อขนาดโค้ด)
-
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 แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
เครื่องมือนี้มีให้บริการในภาษาอื่น
- JavaScript-obfuskerare [SV]
- مُبهِّم JavaScript [AR]
- JavaScript-Obfuscator [DE]
- Ofuscador de JavaScript [ES]
- Obfuscateur JavaScript [FR]
- Obfuscator JavaScript [ID]
- JavaScript 난독화 도구 [KO]
- JavaScript-obfuscator [NL]
- Obfuskator JavaScript [PL]
- Trình làm rối mã JavaScript [VI]
- JavaScript難読化ツール [JA]
- Ofuscador de JavaScript [PT]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]
- Обфускатор JavaScript [RU]
- JavaScript Kod Gizleme Aracı [TR]
- JavaScript混淆器 [ZH]