กลับไปบล็อก

จะรู้ได้อย่างไรว่าสภาพแวดล้อมของเบราว์เซอร์ลายนิ้วมือเป็นของจริง? เจอความผิดปกติจากการตรวจสอบลายนิ้วมือต้องทำอย่างไร?

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

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

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

“ของจริง” ของสภาพแวดล้อมเบราว์เซอร์หมายความว่าอย่างไร

สภาพแวดล้อมที่สมเหตุสมผลมักเข้าเงื่อนไขสี่ข้อ:

  1. สอดคล้องกันภายใน: บราวเซอร์เอ็นจิน (browser engine), User-Agent, ระบบปฏิบัติการ, GPU, ภาษา, เขตเวลา และภูมิภาคเครือข่ายสามารถอธิบายซึ่งกันและกันได้
  2. คงที่เมื่อเวลาผ่านไป: หลังรีสตาร์ท พารามิเตอร์สำคัญต้องไม่เปลี่ยนไปมาอย่างไม่มีระเบียบและรุนแรง
  3. ใช้งานได้จริง: ฟีเจอร์ที่ต้องใช้ เช่น เข้าสู่ระบบ อัปโหลด วิดีโอคอล ชำระเงิน หรือแบ็กเอนด์โฆษณา ทำงานได้ปกติ
  4. สืบต้นทางได้: ทีมรู้ว่าสภาพแวดล้อมนี้ผูกกับบัญชี พร็อกซี และผู้รับผิดชอบใด และมีการบันทึกการเปลี่ยนแปลงคอนฟิก

“พารามิเตอร์ทุกตัวเหมือนคอมพิวเตอร์กายภาพเป๊ะ” ไม่ใช่เงื่อนไขจำเป็น เพราะเบราว์เซอร์ลดความละเอียดของข้อมูลลงเพื่อความเป็นส่วนตัวอยู่แล้ว เช่น คำอธิบายของ MDN เกี่ยวกับ deviceMemory ระบุว่า คุณสมบัตินี้คืนค่าเฉพาะค่าหน่วยความจำโดยประมาณที่ถูกปัดเศษและจำกัดช่วงบนล่าง hardwareConcurrency ก็อาจน้อยกว่าจำนวนโปรเซสเซอร์ลอจิคัลจริงของอุปกรณ์ ดังนั้น ค่าที่ตรวจได้จึงไม่เท่ากับรายงานการตรวจฮาร์ดแวร์

สร้างเส้นฐาน (baseline) ก่อนตรวจ

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

  • เวอร์ชันของเบราว์เซอร์ลายนิ้วมือและ Chromium engine
  • ระบบปฏิบัติการ, User-Agent และความละเอียด
  • ประเภทพร็อกซี, IP ต้นทาง, ประเทศและเมือง
  • การตั้งค่าภาษา, เขตเวลา และตำแหน่งที่ตั้งทางภูมิศาสตร์
  • นโยบายของ WebRTC, DNS, Canvas, WebGL และฟอนต์
  • ส่วนขยายที่ติดตั้งและพารามิเตอร์เริ่มต้น

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

ชั้นที่ 1: ตรวจสอบทางออกของเครือข่าย

ก่อนอื่นยืนยันว่า IP สาธารณะที่คำขอ HTTP แสดงนั้นคือ IP ของพร็อกซีที่สภาพแวดล้อมผูกอยู่หรือไม่ จากนั้นค่อยตรวจ DNS, WebRTC และ IPv6

IP และ DNS

บันทึก IP ต้นทาง, ASN, ISP, ประเทศ, เมือง และเขตเวลา ฐานข้อมูลแต่ละแห่งอาจประเมินเมืองและประเภทพร็อกซีไม่ตรงกัน ความขัดแย้งที่ประเทศหรือ ASN คุ้มค่าต่อการตรวจสอบมากกว่าความคลาดเคลื่อนของเมืองใดเมืองหนึ่ง

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

WebRTC

WebRTC เก็บรวบรวมที่อยู่ ICE candidate เพื่อสร้างการเชื่อมต่อแบบ peer-to-peer RFC 8828 อธิบายว่า WebRTC อาจเปิดเผยที่อยู่สาธารณะหรือที่อยู่เครือข่ายส่วนตัวเพิ่มเติม หรือเมื่อพร็อกซีอนุญาตให้เชื่อมต่อตรง ก็อาจเลี่ยงพร็อกซีจนเผย IP สาธารณะจริง

การตรวจพบที่อยู่ส่วนตัวไม่จำเป็นต้องแปลว่ารั่วไหล IP สาธารณะจริง 192.168.x.x, 10.x.x.x แค่เป็นที่อยู่เครือข่ายท้องถิ่น สิ่งที่ต้องสนใจจริงคือ: ในรายการ ICE candidate ของ WebRTC มี IP สาธารณะอีกตัวที่ไม่เกี่ยวกับพร็อกซีต้นทางปรากฏอยู่หรือไม่

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

ตำแหน่งที่ตั้ง (Geolocation)

พิกัดจาก Geolocation API ของเบราว์เซอร์อาจมาจาก GPS, Wi-Fi, IP, เครือข่ายมือถือ หรือที่ผู้ใช้กรอก ข้อกำหนด W3C Geolocation ระบุชัดว่า API ไม่รับประกันว่าจะคืนตำแหน่งจริงของอุปกรณ์

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

ชั้นที่ 2: ตรวจสอบเบราว์เซอร์และระบบปฏิบัติการ

เน้นเปรียบเทียบคู่ค่าต่อไปนี้:

  • เวอร์ชัน Chromium engine กับเวอร์ชันหลักของเบราว์เซอร์ใน User-Agent
  • ระบบปฏิบัติการใน User-Agent กับ platform, UA Client Hints และชุดฟอนต์
  • ภาษาของอินเทอร์เฟซเบราว์เซอร์, Accept-Language, เขตเวลา และรูปแบบภูมิภาค
  • ความละเอียด, อัตราส่วนพิกเซลอุปกรณ์, ขนาดหน้าต่าง และความสามารถสัมผัส
  • ตัวบ่งชี้มือถือกับขนาดหน้าจอ, ประเภทพอยน์เตอร์ และคุณลักษณะฮาร์ดแวร์

ความผิดปกติที่พบบ่อยคือแก้ User-Agent ด้วยมือแต่ไม่ซิงก์กับ engine หรือ client hint หรือเขียนสภาพแวดล้อม Windows เป็น macOS แต่ยังคงฟอนต์ GPU และคุณลักษณะการโต้ตอบแบบ Windows ไว้ชัดเจน

วิธีที่ปลอดภัยที่สุดไม่ใช่การปั้นค่าทีละรายการ แต่ใช้พรีเซ็ตระบบที่ผ่านการตรวจสอบแล้ว เพื่อให้ engine, UA, แพลตฟอร์ม และพารามิเตอร์ที่เกี่ยวข้องถูกอัปเดตเป็นชุดเดียวกัน หลังอัปเกรด engine ควรสร้างหรือตรวจสอบ User-Agent ใหม่ อย่าล็อกไว้กับเวอร์ชันที่ล้าสมัยชัดเจนเป็นเวลานาน

ชั้นที่ 3: ตรวจสอบสัญญาณฮาร์ดแวร์และการเรนเดอร์

Canvas, WebGL, AudioContext, ฟอนต์, CPU, หน่วยความจำ, อุปกรณ์มีเดีย และ ClientRects ล้วนมีส่วนในการระบุสภาพแวดล้อมได้ เวลาตรวจให้สนใจว่า “ชุดค่าสมเหตุสมผลหรือไม่” และ “คงที่หรือไม่” มากกว่าการไล่ล่า hash ค่าเดียว

WebGL และ GPU

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

CPU และหน่วยความจำ

hardwareConcurrency แทนจำนวนโปรเซสเซอร์ลอจิคัลที่เบราว์เซอร์ใช้ได้ และเบราว์เซอร์อาจรายงานค่าต่ำกว่าที่เป็นจริง ส่วน deviceMemory เป็นค่าโดยประมาณที่ปัดเศษแล้ว การเห็น 4 คอร์หรือ 8GB ไม่สามารถอนุมานย้อนกลับเป็นฮาร์ดแวร์จริงได้ และไม่ควรแก้ทันทีเพียงเพราะไม่ตรงกับคอมพิวเตอร์กายภาพ

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

Canvas และ Audio

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

ลองทดสอบสภาพแวดล้อมเดียวกันด้วยการรีเฟรชต่อเนื่อง ปิดแล้วเปิดใหม่ และเริ่มต้นในวันถัดไป ถ้านโยบายถูกออกแบบเป็น “noise คงที่ระดับสภาพแวดล้อม” สภาพแวดล้อมเดียวกันก็ควรมีความต่อเนื่องที่อธิบายได้

ชั้นที่ 4: ตรวจสอบพื้นที่จัดเก็บ ส่วนขยาย และพารามิเตอร์เริ่มต้น

การแยกสภาพแวดล้อมไม่ได้มีแค่พารามิเตอร์ลายนิ้วมือ แต่ยังรวมถึง Cookie, Local Storage, IndexedDB, แคช, Service Worker, ส่วนขยาย และประวัติการดาวน์โหลด

ใช้สภาพแวดล้อมทดสอบสองตัวล็อกอินเว็บทดสอบคนละเว็บ เพื่อยืนยันว่า Cookie และ Local Storage ไม่ปะปนกัน แล้วตรวจว่าหลังล้างแคช นำเข้า Cookie หรือกู้คืนสภาพแวดล้อมแล้ว ข้อมูลตรงตามที่คาดหวังหรือไม่

ส่วนขยายเป็นตัวรบกวนที่พบบ่อย มันอาจแก้ User-Agent, พร็อกซี, header ของคำขอ, Canvas, WebRTC หรือสคริปต์หน้าเว็บ เมื่อพบความผิดปกติ ให้ปิดส่วนขยายที่ไม่จำเป็นทั้งหมดในสำเนาทดสอบก่อน แล้วค่อยเปิดทีละตัว พารามิเตอร์เริ่มต้นที่ตั้งเองก็ควรตัดออกทีละรายการเช่นกัน เพื่อไม่ให้เครื่องมือหลายตัวเขียนทับสัญญาณเดียวกันพร้อมกัน

ความผิดปกติทั่วไปกับวิธีจัดการ

ลักษณะความผิดปกติสาเหตุที่เป็นไปได้วิธีที่แนะนำ
ประเทศของ IP ไม่ตรงกับเขตเวลาเขตเวลาถูกตั้งตายตัวเป็นค่าท้องถิ่น หรือพร็อกซีระบุภูมิภาคผิดตรวจประเทศพร็อกซีก่อน แล้วให้เขตเวลาไปตาม IP หรือตั้งตามภูมิภาคธุรกิจจริง
IP ต้นทาง HTTP ต่างจาก IP สาธารณะของ WebRTCWebRTC เชื่อมต่อตรง พร็อกซีไม่รองรับ UDP หรือเส้นทางถูกแยกปรับนโยบายเส้นทาง WebRTC ทดสอบ UDP/TURN และฟังก์ชันธุรกิจ
เวอร์ชัน UA ไม่ตรงกับ engineUA ที่ตั้งมือเก่าเกินไป หรืออัปเกรด engine แล้วไม่ซิงก์ใช้พรีเซ็ตที่ตรงกัน สร้าง UA ใหม่แล้วตรวจ UA Client Hints ซ้ำ
บอกว่าเป็น macOS แต่ใช้ฟอนต์/GPU ของ Windowsแก้เฉพาะฟิลด์ภายนอกกลับไปใช้พรีเซ็ตระดับระบบ หลีกเลี่ยงการประกอบข้ามระบบด้วยมือ
Canvas เปลี่ยนทุกครั้งที่รีเฟรชnoise สุ่มแรงเกินไปหรือส่วนขยายขัดแย้งกันกำหนดเป็นนโยบายระดับสภาพแวดล้อม ปิดส่วนขยายที่ขัดแย้งแล้วทดสอบใหม่
CPU หรือหน่วยความจำถูกทำเครื่องหมายแดงเว็บตรวจสอบตีความค่าที่ปัดเศษเป็นฮาร์ดแวร์กายภาพดูนิยามของ API ในเบราว์เซอร์ก่อน แล้วค่อยตัดสินว่ามีความขัดแย้งของชุดค่าจริงหรือไม่
เว็บตรวจสอบสองเว็บสรุปตรงข้ามกันฐานข้อมูล กฎ และจังหวะอัปเดตต่างกันเปรียบเทียบฟิลด์ดิบ ไม่ใช่แค่คะแนนรวม และยึดการทดสอบบนธุรกิจเป้าหมายเป็นหลัก
หลังรีสตาร์ทฟิลด์สำคัญเปลี่ยนคอนฟิกสุ่มไม่ถูกบันทึกถาวร หรือสภาพแวดล้อมถูกสร้างใหม่ตรวจสอบนโยบายการบันทึก การซิงก์ และลายนิ้วมือแบบสุ่ม แล้วกำหนดพารามิเตอร์ระดับสภาพแวดล้อมให้คงที่

ไล่ตรวจทีละชั้นใน PurpleMark

ถ้าข้อสรุปข้างต้นดูปกติ แต่บางแพลตฟอร์มยังแจ้งความผิดปกติ ก็สามารถนำขั้นตอนการตรวจลงไปที่สภาพแวดล้อมที่เกี่ยวข้องใน PurpleMark ได้

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

ขั้นที่สองคือมองพารามิเตอร์เป็นชุดเดียวกันในการตรวจ ไม่ใช่แก้ทีละค่าด้วยมือ ตอนสร้างสภาพแวดล้อมใน PurpleMark ตั้งค่าระบบปฏิบัติการ Chromium engine User-Agent ภาษา เขตเวลา และตำแหน่งที่ตั้งได้ในครั้งเดียว พร้อมคอนฟิกพารามิเตอร์ลายนิ้วมืออย่าง WebGL, WebRTC, CPU, หน่วยความจำ, Canvas ให้ engine, UA, ระบบปฏิบัติการ และฟอนต์ไปตามพรีเซ็ตชุดเดียวกัน จะช่วยเลี่ยงผลลัพธ์ที่ขัดแย้งกันแบบ “ฟอนต์ Windows มากับตัวบ่งชี้ macOS” ก่อนสร้างควรเปิดตัวอย่างสภาพแวดล้อมเพื่อยืนยันว่าชุดฟิลด์สมเหตุสมผล แล้วค่อยบันทึกใช้งาน

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

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

อย่าสร้างความผิดปกติใหม่เพื่อให้ได้คะแนนเต็ม

คะแนนจากเว็บตรวจสอบเหมาะสำหรับการหาข้อบ่งชี้ ไม่เหมาะเป็นเป้าหมายเดียว การเปลี่ยน UA, GPU, Canvas, ฟอนต์ และเขตเวลาบ่อยครั้งอาจทำให้สภาพแวดล้อมไม่เสถียรมากกว่าเดิม และการคัดลอก “ชุดค่าคะแนนเต็ม” ของคนอื่นก็คัดลอกเครือข่าย ฮาร์ดแวร์ และประวัติการใช้งานของเขาไม่ได้

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