WebGL không chỉ dùng cho hiệu ứng web đẹp mắt — nó còn có thể theo dõi người dùng. Tìm hiểu cách vân tay WebGL hoạt động và cách phòng vệ.
Vân tay WebGL nhận diện thiết bị của bạn bằng cách truy vấn phần cứng đồ họa và quan sát chính xác cách nó kết xuất các cảnh 3D. Vì mỗi tổ hợp của mẫu GPU, phiên bản driver và hệ điều hành tạo ra kết quả hơi khác nhau và báo cáo các khả năng hơi khác nhau, một trang web có thể đọc chuỗi nhà sản xuất và bộ kết xuất GPU của bạn, liệt kê các tiện ích mở rộng được hỗ trợ cùng các giới hạn số, và băm một hình ảnh đã kết xuất thành một định danh ổn định — tất cả mà không cần quyền, cookie hay bộ nhớ lưu trữ. Điều này khiến WebGL trở thành một trong những tín hiệu có entropy cao nhất trong vân tay trình duyệt hiện đại.
WebGL là gì và vì sao nó làm lộ danh tính phần cứng
WebGL là một API JavaScript cho phép các trang web truy cập cấp thấp vào GPU để có đồ họa 2D và 3D tăng tốc phần cứng. Về cơ bản nó là một liên kết của trình duyệt với OpenGL ES, nghĩa là khi bạn gọi WebGL, bạn đang vươn xuống qua trình duyệt, qua driver đồ họa, tới bộ xử lý đồ họa vật lý bên trong máy của bạn.
Chính quyền truy cập sâu đó là điều biến WebGL thành mỏ vàng cho vân tay số. Để vẽ hiệu quả, WebGL phải tiết lộ những gì phần cứng của bạn có thể làm — nó hỗ trợ kết cấu (texture) lớn đến đâu, những tính năng tùy chọn nào khả dụng, các shader của nó làm tròn số dấu phẩy động như thế nào. Nó cũng tạo ra đầu ra thay đổi theo phần cứng: cùng một loạt lệnh vẽ lại cho ra các điểm ảnh khác nhau tinh tế trên card NVIDIA so với GPU của Apple so với chip tích hợp Intel, bởi mỗi loại triển khai rasterization, khử răng cưa và toán dấu phẩy động theo cách khác nhau.
Có hai nhóm tín hiệu WebGL lớn: siêu dữ liệu khai báo (các chuỗi và con số mà GPU tự báo cáo về chính nó) và đầu ra đã kết xuất (các điểm ảnh thực tế tạo ra khi vẽ một cảnh). Cùng nhau, chúng bổ trợ cho vân tay Canvas, vốn dò xét đường kết xuất 2D, và cả hai cùng đóng góp vào bức tranh rộng hơn được mô tả trong hướng dẫn về vân tay trình duyệt của chúng tôi.
Các điểm dữ liệu giàu tín hiệu
Chuỗi nhà sản xuất và bộ kết xuất GPU
Tín hiệu WebGL nhận dạng mạnh nhất chính là chuỗi nhà sản xuất và bộ kết xuất không bị che. Theo mặc định, các tham số tiêu chuẩn VENDOR và RENDERER trả về các giá trị chung chung, nhưng tiện ích mở rộng WEBGL_debug_renderer_info lại phơi bày danh tính phần cứng thực sự — những chuỗi như Google Inc. (NVIDIA) và ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Direct3D11 vs_5_0 ps_5_0, D3D11).
Chuỗi này thường tiết lộ mẫu GPU, backend kết xuất (Direct3D, Metal, OpenGL qua ANGLE), và đôi khi cả driver. Tự nó thôi đã có thể thu hẹp bạn xuống một nhóm nhỏ người dùng, vì các tổ hợp GPU cộng backend chính xác hiếm gặp hơn nhiều so với người ta tưởng.
Các tiện ích mở rộng được hỗ trợ
WebGL đi kèm một bộ tính năng lõi cùng hàng chục tiện ích mở rộng tùy chọn. Danh sách mà getSupportedExtensions() trả về — và thứ tự của nó — phụ thuộc vào GPU, driver và phiên bản trình duyệt. Hai thiết bị có cùng một GPU đầu bảng vẫn có thể khác nhau ở đây nếu driver hoặc bản dựng trình duyệt của chúng khác nhau, tạo thêm một lớp phân biệt nữa.
Các tham số số và độ chính xác shader
WebGL phơi bày một danh sách dài các giới hạn số phản ánh khả năng phần cứng: MAX_TEXTURE_SIZE, MAX_VIEWPORT_DIMS, MAX_RENDERBUFFER_SIZE, các dải độ rộng đường và kích thước điểm đã khử răng cưa, và số lượng vector uniform tối đa của vertex và fragment. Độ chính xác shader — được truy vấn qua getShaderPrecisionFormat() cho các định dạng float và int high/medium/low — bổ sung thêm độ chi tiết, vì hành vi độ chính xác gắn liền với chính con chip silicon.
Băm dựa trên kết xuất
Kỹ thuật mạnh nhất phản chiếu vân tay canvas nhưng dẫn nó qua GPU. Một script kết xuất một cảnh cố tình hóc búa — chuyển sắc, chiếu sáng, độ trong suốt, hình học cong — đọc lại các điểm ảnh bằng readPixels(), rồi băm chúng. Những khác biệt trong làm tròn dấu phẩy động, khử răng cưa và lọc kết cấu giữa các GPU và driver tạo ra một giá trị băm ổn định nhưng khác nhau giữa các họ phần cứng. Vì nó nắm bắt hành vi chứ không chỉ giá trị khai báo, nó khó giả mạo một cách thuyết phục hơn nhiều so với một chuỗi siêu dữ liệu.
Nhìn thực tế vào mã
Đoạn mã dưới đây thu thập các tín hiệu WebGL cốt lõi mà một script vân tay sẽ gom lại. Bạn có thể xem kết quả trực tiếp tương đương cho chính trình duyệt của mình bằng công cụ phát hiện vân tay của BrowserInsight.
function getWebGLFingerprint() {
const canvas = document.createElement('canvas');
const gl =
canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
if (!gl) return { supported: false };
// 1. Nhà sản xuất + bộ kết xuất GPU không bị che qua tiện ích debug
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const vendor = debugInfo
? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)
: gl.getParameter(gl.VENDOR);
const renderer = debugInfo
? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)
: gl.getParameter(gl.RENDERER);
// 2. Các giới hạn số về khả năng
const params = {
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
maxRenderbufferSize: gl.getParameter(gl.MAX_RENDERBUFFER_SIZE),
aliasedLineWidth: gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE),
};
// 3. Độ chính xác shader cho định dạng high-float của fragment
const precision = gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER,
gl.HIGH_FLOAT
);
// 4. Các tiện ích mở rộng được hỗ trợ (cả sự hiện diện lẫn thứ tự đều có ý nghĩa)
const extensions = gl.getSupportedExtensions();
return {
supported: true,
vendor,
renderer,
params,
precision: { rangeMin: precision.rangeMin, prec: precision.precision },
extensions,
};
}
Một giá trị băm dựa trên kết xuất đi xa thêm một bước: nó biên dịch một shader, vẽ một hình được chiếu sáng kiểu chuyển sắc, gọi gl.readPixels() vào một mảng kiểu hóa, rồi đưa mảng đó qua một hàm băm. Giá trị thu được giữ nguyên đối với thiết bị của bạn nhưng khác nhau giữa các phần cứng.
WebGL bổ sung bao nhiêu entropy
Entropy đo lường mức độ một tín hiệu thu hẹp được bạn là ai. WebGL có giá trị với những kẻ theo dõi chính vì nó mang nhiều entropy và vẫn ổn định: GPU của bạn không thay đổi giữa các lần tải trang, và phần lớn người dùng không bao giờ đổi driver. Chuỗi nhà sản xuất/bộ kết xuất, danh sách tiện ích mở rộng, các giới hạn số và giá trị băm đã kết xuất có tương quan một phần — tất cả đều bắt nguồn từ cùng một phần cứng — nhưng mỗi cái nắm bắt một thứ mà những cái khác bỏ sót.
Trên thực tế WebGL hiếm khi được dùng một mình. Nó được kết hợp với canvas, âm thanh, phông chữ, số đo màn hình và hàng chục thuộc tính khác. Bảng dưới đây đối chiếu các loại tín hiệu WebGL chính và mức độ dễ giả mạo của từng loại.
| Tín hiệu WebGL | Tiết lộ điều gì | Độ ổn định | Độ khó giả mạo |
|---|---|---|---|
| Chuỗi nhà sản xuất / bộ kết xuất | Mẫu GPU + backend kết xuất | Rất cao | Dễ ghi đè, nhưng phá vỡ tính nhất quán |
| Tiện ích mở rộng được hỗ trợ | Bộ tính năng driver + trình duyệt | Cao | Trung bình — danh sách phải tự nhất quán |
| Tham số số | Giới hạn khả năng phần cứng | Rất cao | Trung bình — các giá trị phụ thuộc lẫn nhau |
| Độ chính xác shader | Hành vi dấu phẩy động | Cao | Khó — gắn với silicon thực |
| Băm điểm ảnh đã kết xuất | Hành vi kết xuất GPU thực tế | Cao | Rất khó — phải giả được đầu ra thực |
Vì siêu dữ liệu và đầu ra đã kết xuất phải khớp với nhau, việc giả mạo ngây thơ thường lại làm tăng tính độc nhất: một thiết bị báo cáo chuỗi bộ kết xuất Intel nhưng tạo ra các điểm ảnh kiểu NVIDIA sẽ nổi bật hơn so với một thiết bị chỉ đơn giản nói thật.
Các trang web sử dụng vân tay WebGL như thế nào
Những mục đích chính đáng rất phổ biến. Các hệ thống chống gian lận và chống bot dùng vân tay WebGL như một trong nhiều tín hiệu để phát hiện lưu lượng tự động, trình duyệt headless và những tài khoản đột nhiên đổi phần cứng. Các đội phân tích và bảo mật dùng nó để gắn cờ các phiên đáng ngờ. Môi trường headless và ảo hóa thường để lộ những chuỗi bộ kết xuất đặc trưng (chẳng hạn các bộ rasterizer phần mềm như SwiftShader hay llvmpipe), và đó là lý do các bộ phát hiện bot dựa rất nhiều vào WebGL.
Cũng chính khả năng đó tiếp sức cho quảng cáo và theo dõi xuyên trang, bởi một ID ổn định bắt nguồn từ phần cứng sống sót qua việc xóa cookie và các cửa sổ duyệt riêng tư. Bản chất lưỡng dụng đó là lý do vì sao việc hiểu vân tay WebGL lại quan trọng, dù mối quan tâm của bạn là bảo mật hay quyền riêng tư.
Các biện pháp phòng vệ và sự đánh đổi
Không có biện pháp phòng vệ hoàn hảo — mỗi lựa chọn đều đánh đổi đi tính năng, hiệu năng, hoặc khả năng hòa lẫn vào đám đông. Các hướng tiếp cận chính:
Tor Browser
Tor Browser chọn con đường chuẩn hóa: nó đi kèm các thiết lập đồng nhất để mọi người dùng cùng trình ra một vân tay giống nhau, và nó hỏi xác nhận trước khi cho phép WebGL chạy. Mục tiêu không phải là che giấu GPU của bạn mà là làm cho mọi người dùng trông y hệt nhau, đó là mô hình quyền riêng tư mạnh nhất — đổi lại là tốc độ và một số nội dung 3D bị hỏng.
Brave và farbling
Brave thêm một mức ngẫu nhiên hóa nhỏ, có tính xác định, theo từng phiên và từng trang (gọi là "farbling") vào các đầu ra có thể bị lấy vân tay, bao gồm cả dữ liệu đọc lại của WebGL. Mỗi trang thấy một giá trị hơi khác, và nhiễu lại được xáo trộn, nên rất khó dựng nên một ID ổn định xuyên trang trong khi phần lớn trang vẫn hoạt động.
Tắt WebGL
Tắt hẳn WebGL (qua các cờ hoặc webgl.disabled) loại bỏ hoàn toàn bề mặt này. Cách này hiệu quả nhưng cứng nhắc: bản thân sự vắng mặt của WebGL đã là điều khá bất thường và có thể làm hỏng bản đồ, trò chơi và các công cụ trực quan hóa.
Giả mạo giá trị — và vì sao nó phản tác dụng
Các tiện ích mở rộng ghi đè chuỗi bộ kết xuất hoặc chèn nhiễu có thể giúp ích, nhưng đi kèm rủi ro thực sự. Nếu siêu dữ liệu giả mạo mâu thuẫn với các điểm ảnh đã kết xuất hoặc các giới hạn số, một bộ phát hiện tinh vi sẽ nhận ra sự bất nhất, và bạn trở nên dễ nhận diện hơn chứ không phải khó hơn. Cách giả mạo an toàn nhất là nhất quán và được nhiều người dùng chia sẻ; việc ngẫu nhiên hóa tùy tiện theo từng người mà không có sự phối hợp thường đạt được điều ngược lại với mục đích.
Bài học thực dụng: hãy chọn một biện pháp phòng vệ mà nhiều người khác cũng dùng (sự đồng nhất của Tor, farbling của Brave) thay vì một cấu hình riêng khiến bạn trở nên độc nhất. Để biết bạn đang ở đâu ngay lúc này, hãy chạy công cụ phát hiện vân tay của BrowserInsight và xem lại bộ kết xuất WebGL, các tiện ích mở rộng và giá trị băm của mình.
WebGL cũng không phải là điểm cuối của việc lấy vân tay GPU. API WebGPU mới hơn tiết lộ nhà sản xuất bộ điều hợp, kiến trúc và chuỗi thiết bị như các thuộc tính hạng nhất — không cần bất kỳ tiện ích mở rộng gỡ lỗi nào — tạo ra bề mặt phong phú hơn mà hầu hết các công cụ quyền riêng tư chưa bao gồm.
Câu hỏi thường gặp
Một trang web có đọc được chính xác mẫu GPU của tôi không?
Trong phần lớn trình duyệt, có. Tiện ích mở rộng WEBGL_debug_renderer_info phơi bày một chuỗi bộ kết xuất không bị che mà thường nêu rõ mẫu GPU và backend kết xuất của bạn. Một số trình duyệt chú trọng quyền riêng tư hạn chế hoặc ngẫu nhiên hóa điều này, nhưng trong cấu hình Chrome hay Edge mặc định thì nó đọc được mà không cần bất kỳ lời nhắc xin quyền nào.
Vân tay WebGL có còn hoạt động ở chế độ riêng tư/ẩn danh không?
Có. Duyệt riêng tư xóa cookie và lịch sử nhưng không thay đổi phần cứng của bạn. Các tín hiệu WebGL — nhà sản xuất, bộ kết xuất, tiện ích mở rộng, giới hạn số và giá trị băm đã kết xuất — vẫn giống nhau giữa cửa sổ thường và cửa sổ riêng tư, nên chúng có thể nhận diện lại bạn ở cả hai.
Tắt WebGL có đủ để chặn vân tay số không?
Nó loại bỏ bề mặt WebGL, nhưng không loại bỏ vân tay số nói chung. Canvas, âm thanh, phông chữ, màn hình và các tín hiệu khác vẫn áp dụng, và sự vắng mặt nổi bật của WebGL bản thân nó cũng có thể là một đặc điểm phân biệt. Tắt nó là một lớp, chứ không phải một giải pháp trọn vẹn.
Vân tay WebGL khác vân tay canvas như thế nào?
Vân tay canvas dò xét đường kết xuất 2D, trong khi WebGL dò xét đường 3D do GPU dẫn động và còn phơi bày siêu dữ liệu phần cứng tường minh (nhà sản xuất, bộ kết xuất, giới hạn khả năng). Chúng có tương quan nhưng khác biệt, và đó là lý do những kẻ theo dõi thu thập cả hai để có độ tin cậy cao hơn.


