ถ้าคุณจัดการหลายบัญชี คงเคยถูกเตือนว่า "ข้อมูลการ์ดจอเป็นหนึ่งในลายนิ้วมือที่สำคัญ" แต่มีน้อยคนที่บอกคุณว่ามันถูกรั่วออกมาอย่างไรและทำไมถึงป้องกันยากขนาดนี้
ยกสถานการณ์จริง: คุณล็อกอินร้าน A ด้วย Chrome และร้าน B ด้วย Edge บนเครื่องเดียวกัน คิดว่า "เปลี่ยนเบราว์เซอร์แล้ว ต้องไม่เป็นไรแน่ ๆ" แต่แพลตฟอร์มก็ยังตัดสินว่าสองบัญชีเชื่อมโยงกัน — เพราะ Chrome และ Edge ใช้ GPU ตัวเดียวกันและรายงานรุ่นการ์ดจอเหมือนกันเป๊ะ
"รุ่นการ์ดจอ" นั่นแหละคือลายนิ้วมือ WebGL
ลายนิ้วมือ WebGL คือตัวระบุฮาร์ดแวร์ที่เบราว์เซอร์เก็บผ่านความสามารถการเรนเดอร์ GPU — ไม่เหมือน Canvas ที่ "วาดรูปแล้ววัดความต่างของพิกเซล" WebGL ถามชื่อและพารามิเตอร์จากการ์ดจอของคุณโดยตรง ลายนิ้วมือเบราว์เซอร์ประกอบด้วยพารามิเตอร์หลายสิบรายการ (หลักการโดยรวมอยู่ในบทความอธิบาย นี้) และ WebGL เป็นรายการที่ "ซื่อสัตย์" ที่สุด: มันแทบไม่เปิดโอกาสให้คุณปลอมตัว
ลายนิ้วมือ Canvas คือ "การวัดทางอ้อม" — ให้คุณวาดรูปแล้วเปรียบเทียบรายละเอียดพิกเซล; ลายนิ้วมือ WebGL คือ "การแนะนำตัวตรง ๆ" — เบราว์เซอร์แค่ถาม GPU ว่ายี่ห้ออะไร รุ่นอะไร อันแรกพึ่งการเดา อันหลังพึ่งการถาม
ดังนั้นถ้าแพลตฟอร์มต้องเลือก "หลักฐานการเชื่อมโยงที่ง่ายที่สุด" WebGL ติดอันดับต้น ๆ เสมอ
กระบวนการเก็บข้อมูลทั้งหมดต้องการแค่ JavaScript หนึ่งบรรทัด สองขั้นตอนจบ:
WEBGL_debug_renderer_info แล้วอ่านสองฟิลด์: UNMASKED_VENDOR_WEBGL (ยี่ห้อการ์ดจอ เช่น "NVIDIA Corporation") และ UNMASKED_RENDERER_WEBGL (รุ่นการ์ดจอ เช่น "NVIDIA GeForce GTX 1650 / PCIe / SSE2") สองฟิลด์นี้เป็นค่าดิบ "ที่ไม่ได้ปกปิด" และ Chrome, Firefox, Edge อนุญาตให้อ่านได้โดยค่าเริ่มต้นมีรายละเอียดที่หลายคนไม่รู้:เปลี่ยนเบราว์เซอร์ไม่ได้ผล Chrome, Edge, Firefox มีเอนจินต่างกัน แต่เบื้องลึกเรียกไดรเวอร์ GPU ตัวเดียวกัน ครั้งแรกที่ผมทดสอบข้อมูล WebGL ของเครื่องเดียวกันแยกกันด้วย Chrome และ Edge รุ่นการ์ดจอเหมือนกันทุกตัวอักษร — เปลี่ยนเบราว์เซอร์หมด แต่ฮาร์ดแวร์ก็ยังเป็นฮาร์ดแวร์ตัวเดิม

หลายคนรู้แค่ว่า "รุ่นการ์ดจอจะถูกเก็บ" แต่ไม่รู้ว่ามีฟิลด์อะไรบ้างถูกเก็บ ผมรวบรวมรายการพารามิเตอร์ที่เว็บตรวจสอบจะอ่าน:
| ฟิลด์ | ค่าตัวอย่าง | คำอธิบาย |
|---|---|---|
| ยี่ห้อ GPU | NVIDIA Corporation | มาจาก UNMASKED_VENDOR_WEBGL |
| รุ่น GPU | NVIDIA GeForce GTX 1650 / PCIe / SSE2 | มาจาก UNMASKED_RENDERER_WEBGL; พ่วงพอร์ตเชื่อมต่อและชุดคำสั่งมาด้วย |
| เวอร์ชัน GLSL | OpenGL ES GLSL 3.00 | เวอร์ชันภาษาของ shader; สะท้อนชุดความสามารถของเบราว์เซอร์และไดรเวอร์ |
| ความแม่นยำ shader | Highp / Mediump / Lowp | GPU แต่ละรุ่นรองรับช่วงความแม่นยำต่างกัน |
| ขนาดเท็กซ์เจอร์สูงสุด | 16384 | ขีดจำกัดความสามารถเท็กซ์เจอร์ของ GPU ยิ่งสูงยิ่งแรง |
| รายการ extension | ANGLE_instanced_arrays ฯลฯ | รายการ extension WebGL ที่รองรับ |
| เลเยอร์ ANGLE | ANGLE (NVIDIA, ...) | Chrome แปลคำขอ WebGL ไปยัง API กราฟิกเบื้องล่างผ่าน ANGLE; เวอร์ชันตัวแปลก็ถูกรั่วด้วย |
พอเข้าใจตารางนี้ คุณจะเห็นว่าทำไมวิธีธรรมดาอย่าง "เปลี่ยน UA" ไร้ผลโดยสิ้นเชิงกับ WebGL — มันอ่านพารามิเตอร์ฮาร์ดแวร์จริง ไม่ใช่คำประกาศของเบราว์เซอร์ เลเยอร์ ANGLE มองข้ามง่ายที่สุด: มันทำหน้าที่เป็น "ล่าม" ระหว่างเบราว์เซอร์กับการ์ดจอ และเวอร์ชันกับวิธีการทำงานของล่าม ตัวมันเองก็เป็นข้อมูลลายนิ้วมืออิสระหนึ่งชิ้น
เพราะมันใช้งานง่ายเกินไปในการตรวจจับการเชื่อมโยง:
นี่คือเหตุผลที่ตอนระบบความเสี่ยงตัดสินการเชื่อมโยง WebGL มักถูกใช้ร่วมกับ Canvas และรายการฟอนต์เป็น "กลุ่มหลักฐานแกนกลาง"
ความเสียหายของห่วงโซ่หลักฐานนี้ต่างกันตามอุตสาหกรรม: สำหรับผู้ขายอีคอมเมิร์ซข้ามพรมแดนที่ล็อกอินหลายร้านบนอุปกรณ์เดียวกัน ข้อมูลการ์ดจอเหมือนกันคือหลักฐานการเชื่อมโยงที่ชัดเจน; สำหรับเมทริกซ์โซเชียลที่เลี้ยงบัญชีเป็นล็อต บัญชีหลายสิบตัวรายงานการ์ดจอเดียวกัน เท่ากับเปิดเผยเองว่า "เบื้องหลังคือทีมเดียวกัน"; สำหรับการทดสอบโฆษณาหลายบัญชี พอบัญชีถูกเชื่อมโยง งบประมาณและจังหวะการเพิ่มยอดพังหมด ไม่ว่าอุตสาหกรรมไหน พอจำนวนบัญชีเพิ่มขึ้น WebGL คือด่านที่เลี่ยงไม่ได้
อยากเห็นว่าการ์ดจอของคุณในสายตาเบราว์เซอร์หน้าตาเป็นยังไง สองขั้นตอนพอ:
ข้อมูลการทำงานของ MasBrowser หลังเปิดสภาพแวดล้อม แสดงสถานะ Fingerprint protection: Enabled

ความหมายของการตรวจจับคือ: ถ้าคุณล็อกอินหลายบัญชีด้วยเบราว์เซอร์ธรรมดา ข้อมูล WebGL ของทุกบัญชีเหมือนกันเป๊ะ — นี่คือหลักฐานที่ทรงพลังที่สุดชิ้นหนึ่งที่แพลตฟอร์มใช้ตัดสินการเชื่อมโยง
ไม่ต้องใช้พร็อกซี ไม่ต้องใช้เครื่องมือเสริม — คุณตรวจได้ว่า WebGL isolation ทำงานหรือไม่แบบในเครื่องล้วน ๆ:
การตรวจสอบนี้ไม่เกี่ยวกับ IP หรือพร็อกซีเลย — ต่อให้สองสภาพแวดล้อมใช้ทางออกเครือข่ายเดียวกัน ข้อมูลการ์ดจอก็ถูกแยกออก และนั่นคือความหมายของการป้องกัน WebGL
ก่อนอื่นดูวิธีที่ "ดูเหมือนใช้ได้แต่จริง ๆ แล้วไม่ได้":
ทิศทางที่ได้ผลจริงคือใส่ "ชั้นปกปิด" ในระดับ WebGL: ให้เบราว์เซอร์คืนตัวระบุที่ต่างจากการ์ดจอจริง หรือสุ่มพารามิเตอร์การเรนเดอร์ เบราว์เซอร์ลายนิ้วมือทำให้เรื่องนี้กลายเป็นสวิตช์ — ยกตัวอย่างMasBrowser ตอนสร้างสภาพแวดล้อม หาตัวเลือกที่เกี่ยวกับ WebGL ในการตั้งค่าลายนิ้วมือ เลือก "สุ่ม" เพื่อสร้างการ์ดจอที่สมเหตุสมผล หรือปรับตามรุ่นการ์ดจอที่พบได้ทั่วไปในภูมิภาคเป้าหมาย
พอเปิดแล้ว ยี่ห้อและรุ่น WebGL ของแต่ละสภาพแวดล้อมถูกสร้างอย่างอิสระ แพลตฟอร์มไม่สามารถร้อยบัญชีหลายตัวผ่าน "การ์ดจอเดียวกัน" ได้อีก ดูการตั้งค่าสภาพแวดล้อมอิสระและการแยกลายนิ้วมือแบบครบถ้วนได้ที่หน้าเว็บจัดการความปลอดภัยหลายบัญชี MasBrowser
ในการใช้งานจริงมีจุดที่มองข้ามง่าย:การ์ดจอที่สุ่มออกมาต้อง "สมเหตุสมผล" เช่น ถ้าพร็อกซี IP บอกว่าภูมิภาคเป้าหมายคืออเมริกา แล้วสุ่มได้รุ่นการ์ดจอที่ขายเฉพาะในจีน ก็ดูเหมือนตั้งใจ วิธีปลอดภัยคือเลือก "สุ่ม" แล้วตรวจดูสักรอบ หรือปรับตามรุ่นการ์ดจอหลักของตลาดเป้าหมายโดยตรง
อีกสองรายละเอียดที่ควรจำ: หนึ่ง โน้ตบุ๊กมักมี GPU ในตัวและ GPU แยก สองชุด ผลการตรวจจับอาจเปลี่ยนตามนโยบายไดรเวอร์และสถานะพลังงาน หลังสร้างสภาพแวดล้อมพยายามอย่าเปลี่ยนโหมดประสิทธิภาพบ่อย ๆ เพื่อให้ลายนิ้วมือนิ่ง; สอง หลัง Windows อัปเดตไดรเวอร์การ์ดจอ ลายนิ้วมือ WebGL อาจเปลี่ยน ถ้าบัญชีทำงานนิ่งมาสักระยะ พยายามอย่าแตะไดรเวอร์ช่วงดำเนินงาน เพื่อเลี่ยง "สภาพแวดล้อมเปลี่ยนกะทันหัน" ที่ดึงดูดระบบความเสี่ยง
ได้ แต่ยากมาก ข้อมูล WebGL จะเปลี่ยนก็ต่อเมื่อเปลี่ยนการ์ดจอหรือติดตั้งไดรเวอร์ใหม่ (อัปเดตเวอร์ชันใหญ่) ในชีวิตประจำวันมันนิ่ง นี่คือเหตุผลที่แพลตฟอร์มกล้าติดตามมันระยะยาว
ได้ แต่แลกมาด้วยต้นทุนสูง — เว็บหลายแห่ง (แผนที่, การแสดงผล 3D, การยืนยันโฆษณาบางแบบ) พึ่งพาการเรนเดอร์ WebGL พอปิดแล้วฟังก์ชันหน้าเว็บถูกจำกัดหรือโหลดไม่ได้เลย เทียบแล้วใช้เบราว์เซอร์ลายนิ้วมือ "ปกปิด" เป็นทางออกที่หรูหรากว่า
ในเบราว์เซอร์ลายนิ้วมือ สิ่งที่เปลี่ยนคือ "ตัวระบุการ์ดจอที่รายงานให้เว็บไซต์" ไม่ใช่ไดรเวอร์การ์ดจอจริง การเรนเดอร์ 3D บนหน้าเว็บยังทำงานปกติ ไม่กระทบฟังก์ชัน
WebGPU คือ API การประมวลผล GPU รุ่นใหม่ เปิดเผยข้อมูลฮาร์ดแวร์ละเอียดกว่า WebGL และจะกลายเป็นมิติลายนิ้วมือใหม่ในอนาคต ตอนนี้เว็บส่วนใหญ่ยังพึ่ง WebGL เป็นหลัก แต่ควรสนใจการป้องกัน WebGPU ตั้งแต่เนิ่น ๆ
ลายนิ้วมือ WebGL เป็นรายการที่ "โกหกน้อยที่สุด" ในลายนิ้วมือเบราว์เซอร์ — มันไม่พึ่งสิ่งที่คุณประกาศ แต่อ่านตัวตนจริงของการ์ดจอคุณโดยตรง สำหรับผู้ใช้ทั่วไป มันคือความเสี่ยงความเป็นส่วนตัว; สำหรับผู้ทำหลายบัญชี มันคือ "หลักฐานหลัก" ในการตัดสินการเชื่อมโยง จัดการไม่ดีก็โดนเก็บทั้งกระดาน
โชคดีที่ความสามารถนี้ปกปิดได้ด้วยเบราว์เซอร์ลายนิ้วมือ เวอร์ชันฟรีมีโควตาสภาพแวดล้อม 2 ตัวดาวน์โหลด MasBrowser สร้างสภาพแวดล้อมแล้วตั้งค่าการสุ่ม WebGL จากนั้นไปหน้าเว็บตรวจจับเปรียบเทียบ — คุณจะเห็นชัดว่าข้อมูลการ์ดจอถูกแยกออกอย่างไร