Cách Hoạt Động của Vân Tay Trình Duyệt: Phân Tích Chi Tiết Các Thông Số
17/10/25


Markus_automation
Expert in data parsing and automation
Fingerprinting trình duyệt là một phương pháp xác định người dùng bằng cách kết hợp các đặc điểm và thông số của trình duyệt và thiết bị của họ mà không cần sử dụng cookie hoặc dữ liệu được lưu trữ khác. Khi bạn truy cập một trang web, một script đặc biệt sẽ thu thập thông tin về môi trường của bạn (hệ điều hành, phiên bản trình duyệt, cài đặt ngôn ngữ, múi giờ, độ phân giải màn hình, danh sách phông chữ, v.v.) và tạo ra một định danh duy nhất, đó là vân tay trình duyệt. Định danh này tồn tại lâu hơn so với cookie thông thường và giúp các trang web nhận diện trình duyệt của bạn khi bạn truy cập lại, ngay cả khi người dùng xóa cookie hoặc mở trang web trong chế độ ẩn danh. Do đó, các trang web có thể theo dõi các hành động của người dùng trên nhiều phiên và tài nguyên khác nhau, liên kết chúng với một hồ sơ duy nhất.
Một vân tay trình duyệt tương tự như vân tay con người, nhưng độ độc nhất ở đây không hoàn toàn đạt 100% mà chỉ khoảng 85–90%, điều này đủ để các trang web xác định một hồ sơ. Điều quan trọng cần hiểu là vân tay là một tập hợp các thông số. Thay đổi một hoặc hai trong số chúng không tạo ra tác động lừa đảo đáng kể: độ độc nhất chỉ giảm đi một phần nhỏ của một phần trăm, vì vậy điều quan trọng là phải làm việc với vân tay một cách toàn diện.

Hãy phân tích xem những thông số nào cấu thành một vân tay trình duyệt, cách thu thập từng thông số, và mỗi thông số ảnh hưởng đến độ độc nhất như thế nào.
Fingerprinting trình duyệt là một phương pháp xác định người dùng bằng cách kết hợp các đặc điểm và thông số của trình duyệt và thiết bị của họ mà không cần sử dụng cookie hoặc dữ liệu được lưu trữ khác. Khi bạn truy cập một trang web, một script đặc biệt sẽ thu thập thông tin về môi trường của bạn (hệ điều hành, phiên bản trình duyệt, cài đặt ngôn ngữ, múi giờ, độ phân giải màn hình, danh sách phông chữ, v.v.) và tạo ra một định danh duy nhất, đó là vân tay trình duyệt. Định danh này tồn tại lâu hơn so với cookie thông thường và giúp các trang web nhận diện trình duyệt của bạn khi bạn truy cập lại, ngay cả khi người dùng xóa cookie hoặc mở trang web trong chế độ ẩn danh. Do đó, các trang web có thể theo dõi các hành động của người dùng trên nhiều phiên và tài nguyên khác nhau, liên kết chúng với một hồ sơ duy nhất.
Một vân tay trình duyệt tương tự như vân tay con người, nhưng độ độc nhất ở đây không hoàn toàn đạt 100% mà chỉ khoảng 85–90%, điều này đủ để các trang web xác định một hồ sơ. Điều quan trọng cần hiểu là vân tay là một tập hợp các thông số. Thay đổi một hoặc hai trong số chúng không tạo ra tác động lừa đảo đáng kể: độ độc nhất chỉ giảm đi một phần nhỏ của một phần trăm, vì vậy điều quan trọng là phải làm việc với vân tay một cách toàn diện.

Hãy phân tích xem những thông số nào cấu thành một vân tay trình duyệt, cách thu thập từng thông số, và mỗi thông số ảnh hưởng đến độ độc nhất như thế nào.
Lấy dấu vân tay so với các phương pháp theo dõi khác
Công nghệ lấy dấu vân tay trình duyệt đã xuất hiện như một phản ứng với những hạn chế của các phương pháp theo dõi người dùng cổ điển.
HTTP cookie
Cách tiếp cận phổ biến nhất để nhận diện người dùng là lưu trữ một mã định danh duy nhất trong trình duyệt (trong tệp cookie) và đọc nó trong mỗi lượt truy cập. Nhược điểm là người dùng có thể xóa cookie, và trang web sẽ mất ID đã phát hành trước đó. Ngoài ra, trong chế độ ẩn danh hoặc khi trình duyệt chặn cookie của bên thứ ba, phương pháp này không hoạt động. Các trình duyệt hiện đại và tiện ích mở rộng cung cấp nhiều công cụ hơn để chặn hoặc tự động xóa cookie, giảm hiệu quả của phương pháp tiếp cận này. Lấy dấu vân tay thì ngược lại, không yêu cầu lưu trữ dữ liệu bên phía khách hàng, vì vậy nó hoạt động ngay cả khi cookie bị vô hiệu hóa và trong chế độ ẩn danh; chỉ cần trình duyệt cung cấp các thông tin hệ thống cần thiết.

Bộ nhớ cục bộ, SessionStorage, và các kho lưu trữ web khác
Giống như cookie, các công nghệ này lưu trữ dữ liệu cục bộ trong trình duyệt. Các kịch bản có thể đọc chúng trong các lượt truy cập lặp lại. Tuy nhiên, người dùng có thể xóa chúng thủ công, và bộ nhớ bị cô lập theo miền; hơn nữa, chỉ có SessionStorage là có sẵn cho một tab/phiên duy nhất.
Còn có Evercookie, một kỹ thuật cố gắng tạo ra các cookie không thể xóa bằng cách sao chép mã định danh trên tất cả các kho lưu trữ có sẵn (cookie HTTP, Flash LSO, Silverlight Isolated Storage, IndexedDB, v.v.), và bằng cách sử dụng bộ đệm và các thủ thuật khác. Nhưng ngay cả Evercookie cũng không phải toàn năng: ví dụ, nó vô dụng trong chế độ ẩn danh, nơi dữ liệu không được lưu trên ổ đĩa cứng. Lấy dấu vân tay không lưu bất kỳ thứ gì trên thiết bị; nó thu thập thông tin mới trong mỗi lượt truy cập, vì vậy khó khăn để dừng nó bằng các phương pháp xóa tiêu chuẩn.

Theo dõi ETag
Mặc dù không phổ biến nhất, đây là một phương pháp làm việc sử dụng bộ đệm HTTP để nhận diện người dùng. Trong yêu cầu đầu tiên, máy chủ trả lại một tài nguyên (ví dụ, một pixel duy nhất) với tiêu đề ETag độc nhất. Trình duyệt lưu trữ nó trong bộ đệm. Khi yêu cầu lặp lại đến cùng URL, trình duyệt tự động gửi If-None-Match với ETag đã nhận trước đó. Do đó, máy chủ có thể nhận diện lại cùng một khách truy cập bằng cách so khớp ETag ngay cả khi cookie đã bị xóa. Đây là một phương pháp theo dõi thụ động không đòi hỏi JavaScript — mã định danh được lưu trong cơ chế bộ đệm. Theo dõi ETag khó phát hiện, tồn tại sau khi xóa cookie (bạn phải xóa bộ đệm), và hoạt động ngay cả khi không có JS. Tuy nhiên, nó cũng có thể bị phản lại nếu cần thiết (vô hiệu hóa bộ đệm, sử dụng các proxy trung gian xóa tiêu đề ETag).

Ẩn danh CNAME
Một kỹ thuật trưng bày bộ theo dõi bên thứ ba như một miền chính bằng cách sử dụng bản ghi DNS CNAME. Ví dụ, thay vì tải từ tracker.thirdparty.com, kịch bản tải từ một miền phụ như tracker.mysite.com, điều này trỏ đến máy chủ của bộ theo dõi ở cấp độ DNS thông qua CNAME. Trình duyệt xử lý một yêu cầu như vậy như thể đến từ nguồn chính, vì vậy các bộ chặn quảng cáo/theo dõi không phát hiện được miền bên thứ ba - cookie của bộ theo dõi được coi là cùng nguồn. Ẩn danh CNAME có thể thậm chí vượt qua các bảo vệ của trình duyệt như Ngăn chặn Theo dõi Thông minh của Safari và các công cụ tương tự. Trong bối cảnh lấy dấu vân tay, phương pháp này có ý nghĩa vì nó cho phép một tập lệnh bên thứ ba thu thập dấu vân tay và đặt cookie giống như thể nó là trang web thực sự. Thực chất, ẩn danh CNAME giấu bên thứ ba, trong khi lấy dấu vân tay hoạt động mà không cần mã định danh được lưu trữ. Cùng nhau chúng có thể tăng cường theo dõi (bộ theo dõi giả vờ là trang web và thu thập dữ liệu người dùng tối đa, bao gồm dấu vân tay, mà không bị chặn).
Lấy dấu vân tay
Lấy dấu vân tay trình duyệt không thay thế các phương pháp đã mô tả ở trên; nó thường được sử dụng cùng với chúng. Ví dụ, trong lần truy cập đầu tiên, một kịch bản có thể thu thập dấu vân tay và cố gắng đặt cookie. Nếu cookie sau đó bị xóa, việc nhận diện lại có thể xảy ra bằng cách so khớp dấu vân tay. Ngoài ra, dấu vân tay có thể bổ sung các phương pháp khác: ví dụ, supercookie được lưu trữ qua bộ đệm favicon có thể giữ một mã ID duy nhất, và bộ theo dõi có thể so sánh các tham số trình duyệt để xác nhận. Tất cả những điều này tạo thành một hệ thống nhiều lớp để theo dõi người dùng.
Các tham số tạo thành dấu vân tay trình duyệt
Một dấu vân tay được tạo thành từ hàng chục thuộc tính nhỏ tạo thành một kết hợp độc nhất. Một số trong đó được gửi tự động với mỗi yêu cầu HTTP (tín hiệu thụ động), trong khi số khác được thu thập ở phía khách hàng thông qua JavaScript và Web API (tín hiệu chủ động).
Tham số thụ động (tiêu đề HTTP và kết nối)
Địa chỉ IP
Địa chỉ của thiết bị của bạn trên mạng, được xác định từ từng yêu cầu đến. Nó có thể chỉ ra vị trí địa lý (quốc gia/thành phố thông qua WHOIS hoặc GeoIP) và sự liên kết với tổ chức/ISP. Mặc dù địa chỉ IP thường không phải là duy nhất (nhiều người dùng có thể nằm sau một địa chỉ công cộng của một ISP duy nhất) và có thể thay đổi động, nó vẫn được bao gồm trong dấu vân tay như một mã định danh mạng cơ bản. Hơn nữa, nếu WebRTC có sẵn, một kịch bản có thể thực hiện một yêu cầu STUN và có được địa chỉ IP thực sự của bạn. Một địa chỉ IP tự nó không phải là thường trực, nhưng kết hợp với các tín hiệu khác nó tăng khả năng duy nhất.

Tác nhân người dùng
Chuỗi tác nhân người dùng được gửi trong tiêu đề User-Agent bởi mỗi trình duyệt. Nó chứa thông tin về trình duyệt, phiên bản của nó, động cơ, phiên bản hệ điều hành, kiến trúc và đôi khi mô hình thiết bị, ví dụ: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/140.0.0.0 Safari/537.36. Phân tích tác nhân người dùng cho phép bạn phân biệt, tương đối, Chrome trên Windows từ Safari trên iOS, v.v. — nói cách khác, thu hẹp nhận diện xuống trình duyệt và nền tảng.
Độ duy nhất của tác nhân người dùng: mặc dù tác nhân người dùng được tạo thành từ một nhóm giới hạn của các phiên bản, kết hợp của hệ điều hành và trình duyệt thường hiếm. Ví dụ, một phiên bản trình duyệt cũ hơn trên một hệ điều hành cụ thể sẽ trình bày một tác nhân người dùng duy nhất. Các tiêu đề không chuẩn được thêm bởi các tiện ích mở rộng cũng có thể xuất hiện trong dấu vân tay; từ đó các trang web có thể suy ra các plugin hoặc khung làm việc đã cài đặt. Tuy nhiên, tổng thể, tác nhân người dùng dễ dàng bị giả mạo, vì vậy bạn không nên dựa vào nó một mình; nó chỉ là một khía cạnh của dấu vân tay.

Tiêu đề chấp nhận và các đặc điểm giao thức khác
Với mỗi yêu cầu, trình duyệt gửi một tập hợp các tiêu đề: các định dạng hỗ trợ (Accept, Accept-Language, Accept-Encoding), người giới thiệu, cờ bộ đệm, v.v. Sự kết hợp của các tiêu đề này cũng rất thông tin. Ví dụ, thứ tự và nội dung của các trường Accept-Language và Accept-Charset có thể khác nhau giữa các ngôn ngữ hệ điều hành. Sự hiện diện của Accept-Encoding: br chỉ ra hỗ trợ Brotli và gián tiếp một trình duyệt hiện đại. Thứ tự cụ thể mà trình duyệt liệt kê các tiêu đề có thể phục vụ như một chữ ký động cơ trình duyệt.
Các tín hiệu cấp độ HTTP được coi là thụ động, vì chúng được cung cấp tự động bởi trình duyệt. Không có JS, máy chủ có thể nhận biết loại thiết bị (thông qua User-Agent), ngôn ngữ ưu tiên (Accept-Language), các loại nội dung mà khách hàng hỗ trợ (ví dụ, hỗ trợ WebP trong Accept tiết lộ động cơ Blink), và vân vân. Tất cả những chi tiết nhỏ này góp phần vào mô hình dấu vân tay.

Múi giờ
Mặc dù múi giờ của người dùng có thể được xác định chủ động (thông qua JS), nó có thể được ước tính từ các tiêu đề cũng như. Ví dụ, tiêu đề Date trong HTTP hoặc thời gian trong nhật ký máy chủ có thể được so sánh với thời gian yêu cầu phía máy khách (chẳng hạn, nếu If-Modified-Since được thấy). Thông thường hơn, Timezone được lấy từ phía máy khách. Tuy nhiên, độ lệch thời gian (GMT±X) là một phần của dấu vân tay vì nó khác nhau trên các vùng và ổn định cho người dùng theo thời gian (trừ khi người dùng đi du lịch hoặc thay đổi cài đặt thủ công).

Công nghệ hỗ trợ
Một số tiêu đề hoặc đặc điểm kết nối có thể chỉ ra khả năng của trình duyệt. Ví dụ, DNT (Do-Not-Track) có mặt nếu người dùng đã kích hoạt “Không Theo Dõi”; DNT: 1 sau đó trở thành một phần của dấu vân tay (nghịch lý là, cờ này có thể làm bạn nổi bật vì ít người kích hoạt nó). Một ví dụ khác: Upgrade-Insecure-Requests: 1 được gửi bởi hầu hết các trình duyệt hiện đại khi chuyển đầu tiên sang HTTPS; sự vắng mặt của nó có thể xác định một khách hàng không thường xuyên. Những khác biệt tinh tế này hiếm khi xuất hiện như các trường dấu vân tay riêng biệt nhưng có thể được xem xét tổng thể.
Các thông số chủ động (JavaScript và Web API)
Độ phân giải màn hình và độ sâu màu sắc
Có thể truy cập thông qua các đối tượng window.screen. Các thuộc tính screen.width/height trả về độ phân giải màn hình hiện tại (đôi khi bao gồm cả việc chia tỷ lệ hiển thị), và screen.colorDepth trả về độ sâu màu sắc (thường là 24 hoặc 32 bit). Các tham số này thường được bao gồm trong dấu vân tay vì chúng rất đa dạng: kích thước màn hình của mọi người đều khác nhau. Trên máy tính để bàn, cửa sổ trình duyệt hiếm khi phù hợp với độ phân giải tối đa, nhưng một dấu vân tay thường lấy độ phân giải tối đa có sẵn của người dùng, điều này phản ánh kích thước hiển thị của họ. Ví dụ, 1920×1080×24 (Full HD, màu 24-bit) là một cấu hình, 1366×768×24 là một cấu hình khác, v.v. Mỗi độ phân giải kết hợp với độ sâu màu có thể thu hẹp nhóm thiết bị. Nếu người dùng thay đổi độ phân giải màn hình hoặc kết nối một màn hình mới, dấu vân tay sẽ thay đổi.

Cài đặt ngôn ngữ
Một trình duyệt công khai một số cài đặt liên quan: ngôn ngữ giao diện/hệ điều hệ thống, ngôn ngữ trang ưu tiên, và định dạng địa phương cho ngày/tháng. JS có thể lấy navigator.language (hoặc navigator.languages cho danh sách) — các giá trị như “ru-RU” hoặc “en-US.” Điều này thường khớp với cái mà máy chủ nhận được trong Accept-Language. Địa phương ảnh hưởng đến các hàm định dạng như Date.toString() (tên tháng trong tiếng Nga hoặc tiếng Anh, v.v.), điều này cũng có thể được sử dụng để lấy dấu vân tay.
Ảnh hưởng đến độ độc nhất: các kết hợp ngôn ngữ và khu vực rất biến đổi. Ví dụ, một người dùng nói tiếng Nga có thể có địa phương ru-RU, hoặc uk-UA (nếu hệ điều hành là tiếng Ucraina), hoặc thậm chí en-US (nếu giao diện là tiếng Anh). Những khác biệt này bổ sung thêm một vài bit entropy. Số lượng kết hợp ngôn ngữ độc nhất tăng lên mỗi năm, nhưng ngôn ngữ một mình không phải là yếu tốt cực kỳ độc nhất: nhiều người sử dụng địa phương phổ biến. Tuy nhiên, kết hợp với các tham số khác, ngôn ngữ giúp phân biệt, nói, Chrome/Windows trong tiếng Nga từ Chrome/Windows trong tiếng Đức, tạo ra hai hồ sơ khác nhau.

Múi giờ (qua JS)
Một cách chính xác hơn để xác định múi giờ là gọi một Date().getTimezoneOffset() mới sử dụng JS. Điều này trả về độ lệch thời gian địa phương từ UTC bằng phút. Ví dụ, GMT+3 cho ra 180 phút. Bạn cũng có thể lấy tên múi giờ bằng cách sử dụng Intl API. Tham số này gần như luôn được bao gồm trong dấu vân tay vì nó ổn định cho thiết bị và thay đổi theo địa lý. Hai người dùng với các tham số giống hệt nhưng múi giờ khác nhau đã tạo ra các dấu vân tay khác nhau.
Lưu ý: một số người hiện đại theo dõi thay đổi múi giờ: điều này có thể chỉ ra rằng cùng một trình duyệt đã thay đổi ngữ cảnh (ví dụ, nếu người dùng đi du lịch hoặc thay đổi cài đặt đồng hồ). Tuy nhiên, giá trị độ lệch hiện tại thường được sử dụng cho một dấu vân tay đơn giản.

Thông tin về nền tảng và CPU
Đối tượng navigator cung cấp một số thuộc tính liên quan đến nền tảng thiết bị:
navigator.platform— một chuỗi chỉ định hệ điều hành/kiến trúc, ví dụ Win32, Linux x86_64, iPhone, v.v. Điều này từng là một tham số khá tiết lộ (phân biệt, ví dụ, 32-bit Windows từ 64-bit), nhưng các trình duyệt hiện đại có thể trả về các giá trị rút ngắn hoặc hợp nhất vì lý do bảo mật. Nếu tham số có sẵn, nó được bao gồm trong dấu vân tay.navigator.hardwareConcurrency— số lượng luồng CPU logic (nhân) trên thiết bị. Ví dụ, 8 (có thể tương ứng với 4 nhân vật lý với Siêu luồng). Điều này gia tăng thêm biến đổi: các thiết bị di động thường có 4 hoặc 8, máy tính để bàn — 4, 8, 12, 16 và nhiều nhân hơn. Không phải trình duyệt nào cũng báo cáo giá trị chính xác, nhưng trong điều kiện bình thường, tham số này được thu thập. Một số luồng không thường (ví dụ, 6 hoặc 10) có thể ngay lập tức làm rõ thiết bị.navigator.deviceMemory— kích thước RAM xấp xỉ bằng gigabyte (số nguyên). Chrome làm tròn đến mức tăng 0.25 (một phần tư). Ví dụ, 8 GB chodeviceMemory = 8. Tín hiệu này không hỗ trợ trong tất cả các trình duyệt. Nơi có mặt, nó được bao gồm: kích thước RAM hiếm khi là một số tròn, vì vậy biến đổi giảm chồng chéo.navigator.oscpu— một chuỗi với hệ điều hành (API chỉ dành cho Firefox). Trong Firefox hiện đại trên Windows, nó trả lại một cái gì đó giống như Windows NT 10.0; Win64; x64. Tham số này hiếm khi được sử dụng vì nó lặp lại thông tin từ User-Agent.navigator.webdriver— một boolean chỉ định liệu trình duyệt có được điều khiển bởi tự động hóa (WebDriver). Nếutrue, trang web biết rằng nó đang đối phó với một bot và có thể thay đổi hành vi hoặc cân nhắc điều này trong dấu vân tay. Đối với dấu vân tay, điều này ít hơn một tham số "độc nhất" và hơn một cách để phát hiện tự động hóa. Tuy nhiên,navigator.webdriver=truerõ ràng chỉ ra khách hàng (người dùng thông thường cófalse), vì vậy gián tiếp nó là một phần của dấu vân tay.

Trạng thái bật chức năng cookie/lưu trữ
Các kịch bản có thể kiểm tra xem liệu cookie có được bật trong trình duyệt không (navigator.cookieEnabled). Nếu người dùng đã vô hiệu hóa chúng, điều này phân biệt họ với phần lớn các người dùng khác (hầu hết mọi người giữ cookie bật) và tăng độ độc nhất.
Danh sách các plugin trình duyệt
navigator.plugins có thể trả về danh sách các plugin NPAPI đã cài đặt: Acrobat Reader, Flash, Silverlight, v.v., bao gồm cả phiên bản của chúng (navigator.plugins[i].name/version), mặc dù các plugin NPAPI phần lớn đã biến mất (Flash và Java bị vô hiệu hoặc gỡ bỏ khỏi các trình duyệt hiện đại). Trong Chrome, navigator.plugins hiện chỉ chứa Trình xem PDF tích hợp; trong Firefox, cũng không có gì thêm. Tuy nhiên, API vẫn tồn tại và một số trình duyệt vẫn có thể trả lại một cái gì đó. Dấu vân tay có thể bao gồm tên plugin và số lượng của chúng. Một danh sách trống cũng là một tín hiệu (ví dụ, Firefox trong chế độ Tor có danh sách rỗng, trong khi Firefox thường chứa một plugin OpenH264 tích hợp). Tuy nhiên, vai trò của các plugin như một yếu tố đang giảm; các tiện ích mở rộng đang dần quan trọng hơn.

Các tiện ích mở rộng đã cài đặt
Về lý tưởng, các trang web không nên biết bạn có bao nhiêu tiện ích mở rộng, nhưng thực tế, một số tiện ích mở rộng có thể được phát hiện gián tiếp. AdBlock hoặc Adblock Plus có thể được phát hiện bằng các yêu cầu bị chặn hoặc các yếu tố DOM cụ thể mà chúng giới thiệu. Một trang web có thể cố gắng tải một URL đã biết được lọc bởi AdBlock — nếu nó không tải, một bộ chặn có thể có mặt.
Một ví dụ khác: tiện ích mở rộng có thể thêm các đối tượng đặc biệt vào window (ví dụ, React Developer Tools thêm __REACT_DEVTOOLS_GLOBAL_HOOK__), và một kịch bản tìm thấy một đối tượng như vậy nhận biết tiện ích mở rộng. Hàng chục kiểm tra nhỏ có thể xây dựng một "ảnh chụp" của môi trường trình duyệt. Số lượng gần đúng của tiện ích mở rộng đôi khi có thể được suy ra từ thời gian phản hồi của trang. Mỗi tiện ích mở rộng đã cài đặt có thể làm chậm quá trình xử lý trang. Trong bất kỳ trường hợp nào, sự hiện diện của các bộ lọc phổ biến, các trình quản lý mật khẩu hoặc các tiện ích mở rộng ngách đều có thể được phát hiện một phần và tăng độ độc nhất của hồ sơ.
Danh sách các font đã cài đặt
Một trong những tham số đa dạng nhất. Tập hợp các font hệ thống phụ thuộc vào hệ điều hành, các ứng dụng đã cài đặt (Microsoft Office thêm font, Adobe thêm riêng của mình, v.v.), và ngôn ngữ hệ thống (các font tiếng Trung thường không có sẵn cho người dùng châu Âu). Làm thế nào một trang web có thể phát hiện bạn có những font nào? Lịch sử, Flash (EnumerateFonts) đã được sử dụng, nhưng không có nó có những phương pháp hoàn toàn dựa trên trình duyệt:
Qua CSS+JS: Tạo một yếu tố ẩn với danh sách dự phòng font-family. Nếu font đầu tiên không được cài đặt, văn bản được hiển thị trong font tiếp theo và chiều rộng/chiều cao của yếu tố thay đổi. JS có thể đo kích thước yếu tố để suy ra font nào được áp dụng. Lặp đi lặp lại hàng trăm font phổ biến để hiển thị các font nào có mặt. Phương pháp này tốn thời gian, vì vậy phương pháp sau thường được sử dụng.
Qua Canvas: vẽ văn bản trong một font cụ thể trên một canvas và so sánh raster pixel cho phép bạn xác định xem font có được cài đặt không. Đây là một trường hợp của Lấy dấu vân tay trên Canvas (xem bên dưới).

Số lượng kết hợp tập hợp font có thể là rất lớn, vì ít người có danh sách font giống hệt nhau, đặc biệt trên các phiên bản hệ điều hành khác nhau. Một font hiếm (ví dụ, font cụ thể cho thiết kế) ngay lập tức làm cho dấu vân tay trở nên độc nhất, khiến dữ liệu font vô cùng hữu ích cho việc lấy dấu vân tay. Việc thu thập font không thực hiện ngay tức thì, vì vậy một số kịch bản lưu trữ kết quả dấu vân tay.
Lấy dấu vân tay trên Canvas
Đây là một phương pháp lấy dấu vân tay nổi tiếng sử dụng thẻ HTML5 <canvas> để có được các đặc điểm vẽ duy nhất. Trình duyệt vẽ nội dung (thường là văn bản với một font và màu sắc cụ thể, đôi khi là hình học) trên một canvas ảo, sau đó kịch bản gọi canvas.toDataURL(), để có được bitmap của nội dung đã vẽ. Hình ảnh được biểu diễn dưới dạng một chuỗi base64, được băm để tạo ra một dấu vân tay Canvas.
Tại sao nó duy nhất? Những khác biệt nhỏ trong hệ thống — các thuật toán làm mượt font, phiên bản driver GPU, nền tảng (Linux so với Windows) — sản sinh ra sự biến đổi tinh vi trong hình ảnh cuối cùng. Thường thì văn bản với các ký tự đa dạng (chữ cái có hình dạng khác nhau, ký hiệu đặc biệt) được vẽ để làm tối đa hóa hiệu ứng làm mượt. Kịch bản có thể vẽ các hình chữ nhật màu, áp dụng các biến đổi hoặc đổ bóng để thực hiện các chức năng đồ họa. Các thiết bị khác nhau tạo ra các hình ảnh khác nhau từ cùng mã vẽ. Dấu vân tay Canvas có thể thay đổi sau khi cập nhật driver GPU hoặc chuyển từ đồ họa tích hợp sang đồ họa rời. Kết hợp với WebGL, tuy nhiên, nó trở nên vô cùng giá trị.

Lấy dấu vân tay WebGL
WebGL là một API để thực hiện đồ họa 3D trong trình duyệt (cung cấp khả năng truy cập vào OpenGL/ES). Nó cung cấp hai loại dữ liệu chính để lấy dấu vân tay:
Các chỉ định trực tiếp GPU
Tiện ích mở rộng WEBGL_debug_renderer_info cho phép một kịch bản lấy chuỗi UNMASKED_VENDOR_WEBGL và UNMASKED_RENDERER_WEBGL từ ngữ cảnh WebGL — những chuỗi này thường liệt kê nhà sản xuất và mô hình GPU (ví dụ: Intel Inc., Đồ họa Intel Iris Plus 640, hoặc NVIDIA Corporation, GeForce GTX 1070). Những giá trị này thực tế tiết lộ mô hình card đồ họa của người dùng. Hầu hết các trình duyệt cho phép điều này ở chế độ tiêu chuẩn (trừ Tor). Mô hình GPU tăng thêm entropy đáng kể: ngay cả khi hai người dùng có cùng hệ điều hành và trình duyệt, một với Đồ họa Intel HD và một với RTX 3080 sẽ có dấu vân tay khác biệt.
Các hằng số và khả năng của WebGL
Ngay cả khi không có tên GPU trực tiếp, ngữ cảnh WebGL giữ nhiều tham số phụ thuộc vào driver và phần cứng: số lượng đơn vị kết cấu tối đa, giới hạn kích thước hình học, hỗ trợ đổ bóng và khử răng cưa, và các hằng số số học khác. Một kịch bản có thể tuần tự gọi gl.getParameter(...) cho các hằng số khác nhau và thu thập kết quả. Ví dụ, MAX_VERTEX_UNIFORM_VECTORS có thể là 4.096 trên một card và 1.024 trên card khác, v.v. Kết quả là một vector dài các số, một dạng hồ sơ của hệ thống đồ họa. Hồ sơ như vậy thường độc nhất cho một thiết bị và có thể khác ngay cả giữa những mô hình GPU tương tự.

Hơn nữa, WebGL có thể được sử dụng giống như Canvas: tức là bằng cách vẽ một cảnh 3D phức tạp và lấy hình ảnh raster của nó. Cách tiếp cận này có thể tiết lộ ngay cả sự khác biệt tinh vi hơn (ví dụ, trong các triển khai shader). Trong thực tế, các thư viện như FingerprintJS thường giới hạn mình chỉ đọc UNMASKED_RENDERER (vì nó đơn giản và đáng tin cậy hơn), nhưng một số kịch bản cũng băm một hình dạng 3D đã vẽ để có được sự ổn định cao hơn. Dữ liệu WebGL tăng đáng kể độ độc nhất của dấu vân tay, đặc biệt trên các thiết bị di động: ví dụ, trước đây rất khó phân biệt giữa các iPhone (tất cả đều có đầu ra Canvas giống hệt nhau do có cùng GPU), nhưng bây giờ phiên bản GPU có thể tiết lộ mô hình iPhone nếu WebGL được bật. Kết hợp với Canvas, WebGL cung cấp một nguồn entropy mạnh. Đó là lý do tại sao các trình duyệt trong các chế độ định hướng bảo mật cố gắng giấu hoặc giả mạo dữ liệu này.
Lấy dấu vân tay Ngữ cảnh âm thanh
Một phương pháp lấy dấu vân tay tinh vi khác sử dụng Web Audio API để tạo ra một dấu vân tay âm thanh duy nhất của thiết bị. Nó dựa trên thực tế rằng việc tạo ra và xử lý âm thanh khác nhau một chút giữa các hệ thống (do các triển khai thư viện, sử dụng chỉ dẫn SIMD, các điểm không chính xác trong tính toán thập phân, v.v.). Trong thực tế, giá trị dấu vân tay Ngữ cảnh âm thanh khác nhau đáng kể giữa các trình duyệt; mỗi "trình duyệt + hệ điều hành + phần cứng" kết hợp sản sinh ra kết quả xác định của riêng mình (miễn là trình duyệt hoặc hệ điều hành không bị thay đổi đáng kể). Thêm một dấu vân tay âm thanh làm mạnh mẽ hơn sự nhận diện: ngay cả khi đầu ra Canvas và WebGL vô tình trùng khớp, dấu vân tay âm thanh vẫn có thể phân biệt các thiết bị.
Các thiết bị và cảm biến phương tiện
Trong khi lấy dấu vân tay, một kịch bản cũng có thể thu thập thông tin về phần cứng ngoại vi:
Qua
navigator.mediaDevices.enumerateDevices(), nó có thể lấy danh sách các thiết bị phương tiện của người dùng (cameras, microphones). Trình duyệt thường trả lại dữ liệu giới hạn, chẳng hạn, "hai cameras và một microphone" mà không có tên hoặc ID trừ khi được cấp quyền. Tuy nhiên, chỉ số lượng thiết bị đã có thể đóng vai trò làm yếu tố phân biệtCác API như Trạng thái Pin (mức pin còn lại) từng có sẵn và cũng được sử dụng cho việc lấy dấu vân tay. Mức pin và thời gian còn lại sản sinh ra các tổ hợp độc nhất. Vì các API này có thể cung cấp quá nhiều định danh chính xác (một vấn đề về riêng tư), chúng hiện bị giới hạn hoặc yêu cầu quyền truy cập.
Cảm biến (Hướng, Chuyển động): sự hiện diện của một số cảm biến và định dạng đầu ra của chúng có thể khác nhau trên các thiết bị (ví dụ, tốc độ làm tươi của con quay hồi chuyển). Những tín hiệu này khá hiếm gặp nhưng chúng vẫn có thể lý thuyết bổ sung cho dấu vân tay.
Tổng thể, thiết bị càng không thông thường, nó càng tiết lộ thông qua các API như vậy. Nếu một người dùng hoàn toàn không có camera hoặc microphone, điều đó đã phân biệt họ khỏi hầu hết các máy tính xách tay, mà hầu hết luôn có webcam.
Tất cả các yếu tố kể trên - cả thuộc tính chủ động và thụ động - tạo thành một bộ các đặc điểm của trình duyệt và hệ thống. Trong thực tế, các kịch bản thu thập từ 10–30 tham số và biên soạn chúng thành một cấu trúc (ví dụ, một đối tượng hoặc một mảng chuỗi), sau đó được chuyển đổi thành một hàm băm. Nhiều thư viện sử dụng các thuật toán hàm băm nhanh như MurmurHash để tạo ra một định danh nhỏ gọn từ khoảng 500 byte của dữ liệu thuộc tính. Kết quả là một chuỗi (ví dụ, a3f6e9b12d4...) có thể được lưu trữ trên máy chủ như mã định danh thiết bị.

Bảo vệ chống lại lấy dấu vân tay trình duyệt
Các trình duyệt hiện đại thực hiện các biện pháp đối kháng khác nhau nhằm chống lại việc lấy dấu vân tay. Ví dụ, Trình duyệt Tor cố gắng làm cho tất cả người dùng trông giống hệt nhau (User-Agent giống nhau, kích thước cửa sổ cố định, bộ font thống nhất, Canvas và Âm thanh Ngữ cảnh bị vô hiệu hóa, v.v.). Nó thậm chí cảnh báo người dùng không nên tối đa hóa cửa sổ nếu họ muốn duy trì ẩn danh.
Firefox bao gồm cài đặt privacy.resistFingerprinting, cũng để làm trung bình giá trị. Brave chặn trình theo dõi bên thứ ba mặc định và chèn nhiễu vào các API. Có các tiện ích mở rộng như CanvasBlocker hoặc Privacy Badger mà phá vỡ có chọn lọc các kịch bản theo dõi.
Tuy nhiên, không có phương pháp nào cung cấp 100% bảo vệ — quá nhiều tham số được trình duyệt công khai. Đáp lại nhu cầu ngày càng tăng về ẩn danh, trình duyệt chống phát hiện (như Octo Browser, MultiLogin, và Dolphin {anty}) đã xuất hiện, cho phép người dùng giả lập các dấu vân tay khác nhau và tạo ra hàng chục nhận dạng “ảo” với các tham số riêng biệt cho, ví dụ, các mục đích tiếp thị liên kết.
Cuộc đua đã bắt đầu từ nhiều năm trước tiếp tục: các trình theo dõi phát triển các kỹ thuật mới, và các trình duyệt phát minh ra các biện pháp đối kháng mới. Người dùng bình thường rõ ràng bị mất trong cuộc đua này — nếu một người không chủ động quan tâm đến riêng tư, bất kỳ trang web nào cũng có thể nắm bắt dấu vân tay kỹ thuật số của họ và đối chiếu nó với dữ liệu từ các nguồn khác.
Một dấu vân tay bao gồm nhiều thành phần, mỗi cái tăng một mức độ độc nhất. Hy vọng rằng, sự giải thích này đã giúp bạn hiểu rõ cách mà trình duyệt của bạn có thể được xác định bởi các trang web — vì hiểu rõ cách công nghệ hoạt động là bước đầu tiên để biết được nơi mà ranh giới nằm giữa sự tiện lợi của cá nhân hóa và bảo vệ dữ liệu cá nhân.
Lấy dấu vân tay so với các phương pháp theo dõi khác
Công nghệ lấy dấu vân tay trình duyệt đã xuất hiện như một phản ứng với những hạn chế của các phương pháp theo dõi người dùng cổ điển.
HTTP cookie
Cách tiếp cận phổ biến nhất để nhận diện người dùng là lưu trữ một mã định danh duy nhất trong trình duyệt (trong tệp cookie) và đọc nó trong mỗi lượt truy cập. Nhược điểm là người dùng có thể xóa cookie, và trang web sẽ mất ID đã phát hành trước đó. Ngoài ra, trong chế độ ẩn danh hoặc khi trình duyệt chặn cookie của bên thứ ba, phương pháp này không hoạt động. Các trình duyệt hiện đại và tiện ích mở rộng cung cấp nhiều công cụ hơn để chặn hoặc tự động xóa cookie, giảm hiệu quả của phương pháp tiếp cận này. Lấy dấu vân tay thì ngược lại, không yêu cầu lưu trữ dữ liệu bên phía khách hàng, vì vậy nó hoạt động ngay cả khi cookie bị vô hiệu hóa và trong chế độ ẩn danh; chỉ cần trình duyệt cung cấp các thông tin hệ thống cần thiết.

Bộ nhớ cục bộ, SessionStorage, và các kho lưu trữ web khác
Giống như cookie, các công nghệ này lưu trữ dữ liệu cục bộ trong trình duyệt. Các kịch bản có thể đọc chúng trong các lượt truy cập lặp lại. Tuy nhiên, người dùng có thể xóa chúng thủ công, và bộ nhớ bị cô lập theo miền; hơn nữa, chỉ có SessionStorage là có sẵn cho một tab/phiên duy nhất.
Còn có Evercookie, một kỹ thuật cố gắng tạo ra các cookie không thể xóa bằng cách sao chép mã định danh trên tất cả các kho lưu trữ có sẵn (cookie HTTP, Flash LSO, Silverlight Isolated Storage, IndexedDB, v.v.), và bằng cách sử dụng bộ đệm và các thủ thuật khác. Nhưng ngay cả Evercookie cũng không phải toàn năng: ví dụ, nó vô dụng trong chế độ ẩn danh, nơi dữ liệu không được lưu trên ổ đĩa cứng. Lấy dấu vân tay không lưu bất kỳ thứ gì trên thiết bị; nó thu thập thông tin mới trong mỗi lượt truy cập, vì vậy khó khăn để dừng nó bằng các phương pháp xóa tiêu chuẩn.

Theo dõi ETag
Mặc dù không phổ biến nhất, đây là một phương pháp làm việc sử dụng bộ đệm HTTP để nhận diện người dùng. Trong yêu cầu đầu tiên, máy chủ trả lại một tài nguyên (ví dụ, một pixel duy nhất) với tiêu đề ETag độc nhất. Trình duyệt lưu trữ nó trong bộ đệm. Khi yêu cầu lặp lại đến cùng URL, trình duyệt tự động gửi If-None-Match với ETag đã nhận trước đó. Do đó, máy chủ có thể nhận diện lại cùng một khách truy cập bằng cách so khớp ETag ngay cả khi cookie đã bị xóa. Đây là một phương pháp theo dõi thụ động không đòi hỏi JavaScript — mã định danh được lưu trong cơ chế bộ đệm. Theo dõi ETag khó phát hiện, tồn tại sau khi xóa cookie (bạn phải xóa bộ đệm), và hoạt động ngay cả khi không có JS. Tuy nhiên, nó cũng có thể bị phản lại nếu cần thiết (vô hiệu hóa bộ đệm, sử dụng các proxy trung gian xóa tiêu đề ETag).

Ẩn danh CNAME
Một kỹ thuật trưng bày bộ theo dõi bên thứ ba như một miền chính bằng cách sử dụng bản ghi DNS CNAME. Ví dụ, thay vì tải từ tracker.thirdparty.com, kịch bản tải từ một miền phụ như tracker.mysite.com, điều này trỏ đến máy chủ của bộ theo dõi ở cấp độ DNS thông qua CNAME. Trình duyệt xử lý một yêu cầu như vậy như thể đến từ nguồn chính, vì vậy các bộ chặn quảng cáo/theo dõi không phát hiện được miền bên thứ ba - cookie của bộ theo dõi được coi là cùng nguồn. Ẩn danh CNAME có thể thậm chí vượt qua các bảo vệ của trình duyệt như Ngăn chặn Theo dõi Thông minh của Safari và các công cụ tương tự. Trong bối cảnh lấy dấu vân tay, phương pháp này có ý nghĩa vì nó cho phép một tập lệnh bên thứ ba thu thập dấu vân tay và đặt cookie giống như thể nó là trang web thực sự. Thực chất, ẩn danh CNAME giấu bên thứ ba, trong khi lấy dấu vân tay hoạt động mà không cần mã định danh được lưu trữ. Cùng nhau chúng có thể tăng cường theo dõi (bộ theo dõi giả vờ là trang web và thu thập dữ liệu người dùng tối đa, bao gồm dấu vân tay, mà không bị chặn).
Lấy dấu vân tay
Lấy dấu vân tay trình duyệt không thay thế các phương pháp đã mô tả ở trên; nó thường được sử dụng cùng với chúng. Ví dụ, trong lần truy cập đầu tiên, một kịch bản có thể thu thập dấu vân tay và cố gắng đặt cookie. Nếu cookie sau đó bị xóa, việc nhận diện lại có thể xảy ra bằng cách so khớp dấu vân tay. Ngoài ra, dấu vân tay có thể bổ sung các phương pháp khác: ví dụ, supercookie được lưu trữ qua bộ đệm favicon có thể giữ một mã ID duy nhất, và bộ theo dõi có thể so sánh các tham số trình duyệt để xác nhận. Tất cả những điều này tạo thành một hệ thống nhiều lớp để theo dõi người dùng.
Các tham số tạo thành dấu vân tay trình duyệt
Một dấu vân tay được tạo thành từ hàng chục thuộc tính nhỏ tạo thành một kết hợp độc nhất. Một số trong đó được gửi tự động với mỗi yêu cầu HTTP (tín hiệu thụ động), trong khi số khác được thu thập ở phía khách hàng thông qua JavaScript và Web API (tín hiệu chủ động).
Tham số thụ động (tiêu đề HTTP và kết nối)
Địa chỉ IP
Địa chỉ của thiết bị của bạn trên mạng, được xác định từ từng yêu cầu đến. Nó có thể chỉ ra vị trí địa lý (quốc gia/thành phố thông qua WHOIS hoặc GeoIP) và sự liên kết với tổ chức/ISP. Mặc dù địa chỉ IP thường không phải là duy nhất (nhiều người dùng có thể nằm sau một địa chỉ công cộng của một ISP duy nhất) và có thể thay đổi động, nó vẫn được bao gồm trong dấu vân tay như một mã định danh mạng cơ bản. Hơn nữa, nếu WebRTC có sẵn, một kịch bản có thể thực hiện một yêu cầu STUN và có được địa chỉ IP thực sự của bạn. Một địa chỉ IP tự nó không phải là thường trực, nhưng kết hợp với các tín hiệu khác nó tăng khả năng duy nhất.

Tác nhân người dùng
Chuỗi tác nhân người dùng được gửi trong tiêu đề User-Agent bởi mỗi trình duyệt. Nó chứa thông tin về trình duyệt, phiên bản của nó, động cơ, phiên bản hệ điều hành, kiến trúc và đôi khi mô hình thiết bị, ví dụ: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/140.0.0.0 Safari/537.36. Phân tích tác nhân người dùng cho phép bạn phân biệt, tương đối, Chrome trên Windows từ Safari trên iOS, v.v. — nói cách khác, thu hẹp nhận diện xuống trình duyệt và nền tảng.
Độ duy nhất của tác nhân người dùng: mặc dù tác nhân người dùng được tạo thành từ một nhóm giới hạn của các phiên bản, kết hợp của hệ điều hành và trình duyệt thường hiếm. Ví dụ, một phiên bản trình duyệt cũ hơn trên một hệ điều hành cụ thể sẽ trình bày một tác nhân người dùng duy nhất. Các tiêu đề không chuẩn được thêm bởi các tiện ích mở rộng cũng có thể xuất hiện trong dấu vân tay; từ đó các trang web có thể suy ra các plugin hoặc khung làm việc đã cài đặt. Tuy nhiên, tổng thể, tác nhân người dùng dễ dàng bị giả mạo, vì vậy bạn không nên dựa vào nó một mình; nó chỉ là một khía cạnh của dấu vân tay.

Tiêu đề chấp nhận và các đặc điểm giao thức khác
Với mỗi yêu cầu, trình duyệt gửi một tập hợp các tiêu đề: các định dạng hỗ trợ (Accept, Accept-Language, Accept-Encoding), người giới thiệu, cờ bộ đệm, v.v. Sự kết hợp của các tiêu đề này cũng rất thông tin. Ví dụ, thứ tự và nội dung của các trường Accept-Language và Accept-Charset có thể khác nhau giữa các ngôn ngữ hệ điều hành. Sự hiện diện của Accept-Encoding: br chỉ ra hỗ trợ Brotli và gián tiếp một trình duyệt hiện đại. Thứ tự cụ thể mà trình duyệt liệt kê các tiêu đề có thể phục vụ như một chữ ký động cơ trình duyệt.
Các tín hiệu cấp độ HTTP được coi là thụ động, vì chúng được cung cấp tự động bởi trình duyệt. Không có JS, máy chủ có thể nhận biết loại thiết bị (thông qua User-Agent), ngôn ngữ ưu tiên (Accept-Language), các loại nội dung mà khách hàng hỗ trợ (ví dụ, hỗ trợ WebP trong Accept tiết lộ động cơ Blink), và vân vân. Tất cả những chi tiết nhỏ này góp phần vào mô hình dấu vân tay.

Múi giờ
Mặc dù múi giờ của người dùng có thể được xác định chủ động (thông qua JS), nó có thể được ước tính từ các tiêu đề cũng như. Ví dụ, tiêu đề Date trong HTTP hoặc thời gian trong nhật ký máy chủ có thể được so sánh với thời gian yêu cầu phía máy khách (chẳng hạn, nếu If-Modified-Since được thấy). Thông thường hơn, Timezone được lấy từ phía máy khách. Tuy nhiên, độ lệch thời gian (GMT±X) là một phần của dấu vân tay vì nó khác nhau trên các vùng và ổn định cho người dùng theo thời gian (trừ khi người dùng đi du lịch hoặc thay đổi cài đặt thủ công).

Công nghệ hỗ trợ
Một số tiêu đề hoặc đặc điểm kết nối có thể chỉ ra khả năng của trình duyệt. Ví dụ, DNT (Do-Not-Track) có mặt nếu người dùng đã kích hoạt “Không Theo Dõi”; DNT: 1 sau đó trở thành một phần của dấu vân tay (nghịch lý là, cờ này có thể làm bạn nổi bật vì ít người kích hoạt nó). Một ví dụ khác: Upgrade-Insecure-Requests: 1 được gửi bởi hầu hết các trình duyệt hiện đại khi chuyển đầu tiên sang HTTPS; sự vắng mặt của nó có thể xác định một khách hàng không thường xuyên. Những khác biệt tinh tế này hiếm khi xuất hiện như các trường dấu vân tay riêng biệt nhưng có thể được xem xét tổng thể.
Các thông số chủ động (JavaScript và Web API)
Độ phân giải màn hình và độ sâu màu sắc
Có thể truy cập thông qua các đối tượng window.screen. Các thuộc tính screen.width/height trả về độ phân giải màn hình hiện tại (đôi khi bao gồm cả việc chia tỷ lệ hiển thị), và screen.colorDepth trả về độ sâu màu sắc (thường là 24 hoặc 32 bit). Các tham số này thường được bao gồm trong dấu vân tay vì chúng rất đa dạng: kích thước màn hình của mọi người đều khác nhau. Trên máy tính để bàn, cửa sổ trình duyệt hiếm khi phù hợp với độ phân giải tối đa, nhưng một dấu vân tay thường lấy độ phân giải tối đa có sẵn của người dùng, điều này phản ánh kích thước hiển thị của họ. Ví dụ, 1920×1080×24 (Full HD, màu 24-bit) là một cấu hình, 1366×768×24 là một cấu hình khác, v.v. Mỗi độ phân giải kết hợp với độ sâu màu có thể thu hẹp nhóm thiết bị. Nếu người dùng thay đổi độ phân giải màn hình hoặc kết nối một màn hình mới, dấu vân tay sẽ thay đổi.

Cài đặt ngôn ngữ
Một trình duyệt công khai một số cài đặt liên quan: ngôn ngữ giao diện/hệ điều hệ thống, ngôn ngữ trang ưu tiên, và định dạng địa phương cho ngày/tháng. JS có thể lấy navigator.language (hoặc navigator.languages cho danh sách) — các giá trị như “ru-RU” hoặc “en-US.” Điều này thường khớp với cái mà máy chủ nhận được trong Accept-Language. Địa phương ảnh hưởng đến các hàm định dạng như Date.toString() (tên tháng trong tiếng Nga hoặc tiếng Anh, v.v.), điều này cũng có thể được sử dụng để lấy dấu vân tay.
Ảnh hưởng đến độ độc nhất: các kết hợp ngôn ngữ và khu vực rất biến đổi. Ví dụ, một người dùng nói tiếng Nga có thể có địa phương ru-RU, hoặc uk-UA (nếu hệ điều hành là tiếng Ucraina), hoặc thậm chí en-US (nếu giao diện là tiếng Anh). Những khác biệt này bổ sung thêm một vài bit entropy. Số lượng kết hợp ngôn ngữ độc nhất tăng lên mỗi năm, nhưng ngôn ngữ một mình không phải là yếu tốt cực kỳ độc nhất: nhiều người sử dụng địa phương phổ biến. Tuy nhiên, kết hợp với các tham số khác, ngôn ngữ giúp phân biệt, nói, Chrome/Windows trong tiếng Nga từ Chrome/Windows trong tiếng Đức, tạo ra hai hồ sơ khác nhau.

Múi giờ (qua JS)
Một cách chính xác hơn để xác định múi giờ là gọi một Date().getTimezoneOffset() mới sử dụng JS. Điều này trả về độ lệch thời gian địa phương từ UTC bằng phút. Ví dụ, GMT+3 cho ra 180 phút. Bạn cũng có thể lấy tên múi giờ bằng cách sử dụng Intl API. Tham số này gần như luôn được bao gồm trong dấu vân tay vì nó ổn định cho thiết bị và thay đổi theo địa lý. Hai người dùng với các tham số giống hệt nhưng múi giờ khác nhau đã tạo ra các dấu vân tay khác nhau.
Lưu ý: một số người hiện đại theo dõi thay đổi múi giờ: điều này có thể chỉ ra rằng cùng một trình duyệt đã thay đổi ngữ cảnh (ví dụ, nếu người dùng đi du lịch hoặc thay đổi cài đặt đồng hồ). Tuy nhiên, giá trị độ lệch hiện tại thường được sử dụng cho một dấu vân tay đơn giản.

Thông tin về nền tảng và CPU
Đối tượng navigator cung cấp một số thuộc tính liên quan đến nền tảng thiết bị:
navigator.platform— một chuỗi chỉ định hệ điều hành/kiến trúc, ví dụ Win32, Linux x86_64, iPhone, v.v. Điều này từng là một tham số khá tiết lộ (phân biệt, ví dụ, 32-bit Windows từ 64-bit), nhưng các trình duyệt hiện đại có thể trả về các giá trị rút ngắn hoặc hợp nhất vì lý do bảo mật. Nếu tham số có sẵn, nó được bao gồm trong dấu vân tay.navigator.hardwareConcurrency— số lượng luồng CPU logic (nhân) trên thiết bị. Ví dụ, 8 (có thể tương ứng với 4 nhân vật lý với Siêu luồng). Điều này gia tăng thêm biến đổi: các thiết bị di động thường có 4 hoặc 8, máy tính để bàn — 4, 8, 12, 16 và nhiều nhân hơn. Không phải trình duyệt nào cũng báo cáo giá trị chính xác, nhưng trong điều kiện bình thường, tham số này được thu thập. Một số luồng không thường (ví dụ, 6 hoặc 10) có thể ngay lập tức làm rõ thiết bị.navigator.deviceMemory— kích thước RAM xấp xỉ bằng gigabyte (số nguyên). Chrome làm tròn đến mức tăng 0.25 (một phần tư). Ví dụ, 8 GB chodeviceMemory = 8. Tín hiệu này không hỗ trợ trong tất cả các trình duyệt. Nơi có mặt, nó được bao gồm: kích thước RAM hiếm khi là một số tròn, vì vậy biến đổi giảm chồng chéo.navigator.oscpu— một chuỗi với hệ điều hành (API chỉ dành cho Firefox). Trong Firefox hiện đại trên Windows, nó trả lại một cái gì đó giống như Windows NT 10.0; Win64; x64. Tham số này hiếm khi được sử dụng vì nó lặp lại thông tin từ User-Agent.navigator.webdriver— một boolean chỉ định liệu trình duyệt có được điều khiển bởi tự động hóa (WebDriver). Nếutrue, trang web biết rằng nó đang đối phó với một bot và có thể thay đổi hành vi hoặc cân nhắc điều này trong dấu vân tay. Đối với dấu vân tay, điều này ít hơn một tham số "độc nhất" và hơn một cách để phát hiện tự động hóa. Tuy nhiên,navigator.webdriver=truerõ ràng chỉ ra khách hàng (người dùng thông thường cófalse), vì vậy gián tiếp nó là một phần của dấu vân tay.

Trạng thái bật chức năng cookie/lưu trữ
Các kịch bản có thể kiểm tra xem liệu cookie có được bật trong trình duyệt không (navigator.cookieEnabled). Nếu người dùng đã vô hiệu hóa chúng, điều này phân biệt họ với phần lớn các người dùng khác (hầu hết mọi người giữ cookie bật) và tăng độ độc nhất.
Danh sách các plugin trình duyệt
navigator.plugins có thể trả về danh sách các plugin NPAPI đã cài đặt: Acrobat Reader, Flash, Silverlight, v.v., bao gồm cả phiên bản của chúng (navigator.plugins[i].name/version), mặc dù các plugin NPAPI phần lớn đã biến mất (Flash và Java bị vô hiệu hoặc gỡ bỏ khỏi các trình duyệt hiện đại). Trong Chrome, navigator.plugins hiện chỉ chứa Trình xem PDF tích hợp; trong Firefox, cũng không có gì thêm. Tuy nhiên, API vẫn tồn tại và một số trình duyệt vẫn có thể trả lại một cái gì đó. Dấu vân tay có thể bao gồm tên plugin và số lượng của chúng. Một danh sách trống cũng là một tín hiệu (ví dụ, Firefox trong chế độ Tor có danh sách rỗng, trong khi Firefox thường chứa một plugin OpenH264 tích hợp). Tuy nhiên, vai trò của các plugin như một yếu tố đang giảm; các tiện ích mở rộng đang dần quan trọng hơn.

Các tiện ích mở rộng đã cài đặt
Về lý tưởng, các trang web không nên biết bạn có bao nhiêu tiện ích mở rộng, nhưng thực tế, một số tiện ích mở rộng có thể được phát hiện gián tiếp. AdBlock hoặc Adblock Plus có thể được phát hiện bằng các yêu cầu bị chặn hoặc các yếu tố DOM cụ thể mà chúng giới thiệu. Một trang web có thể cố gắng tải một URL đã biết được lọc bởi AdBlock — nếu nó không tải, một bộ chặn có thể có mặt.
Một ví dụ khác: tiện ích mở rộng có thể thêm các đối tượng đặc biệt vào window (ví dụ, React Developer Tools thêm __REACT_DEVTOOLS_GLOBAL_HOOK__), và một kịch bản tìm thấy một đối tượng như vậy nhận biết tiện ích mở rộng. Hàng chục kiểm tra nhỏ có thể xây dựng một "ảnh chụp" của môi trường trình duyệt. Số lượng gần đúng của tiện ích mở rộng đôi khi có thể được suy ra từ thời gian phản hồi của trang. Mỗi tiện ích mở rộng đã cài đặt có thể làm chậm quá trình xử lý trang. Trong bất kỳ trường hợp nào, sự hiện diện của các bộ lọc phổ biến, các trình quản lý mật khẩu hoặc các tiện ích mở rộng ngách đều có thể được phát hiện một phần và tăng độ độc nhất của hồ sơ.
Danh sách các font đã cài đặt
Một trong những tham số đa dạng nhất. Tập hợp các font hệ thống phụ thuộc vào hệ điều hành, các ứng dụng đã cài đặt (Microsoft Office thêm font, Adobe thêm riêng của mình, v.v.), và ngôn ngữ hệ thống (các font tiếng Trung thường không có sẵn cho người dùng châu Âu). Làm thế nào một trang web có thể phát hiện bạn có những font nào? Lịch sử, Flash (EnumerateFonts) đã được sử dụng, nhưng không có nó có những phương pháp hoàn toàn dựa trên trình duyệt:
Qua CSS+JS: Tạo một yếu tố ẩn với danh sách dự phòng font-family. Nếu font đầu tiên không được cài đặt, văn bản được hiển thị trong font tiếp theo và chiều rộng/chiều cao của yếu tố thay đổi. JS có thể đo kích thước yếu tố để suy ra font nào được áp dụng. Lặp đi lặp lại hàng trăm font phổ biến để hiển thị các font nào có mặt. Phương pháp này tốn thời gian, vì vậy phương pháp sau thường được sử dụng.
Qua Canvas: vẽ văn bản trong một font cụ thể trên một canvas và so sánh raster pixel cho phép bạn xác định xem font có được cài đặt không. Đây là một trường hợp của Lấy dấu vân tay trên Canvas (xem bên dưới).

Số lượng kết hợp tập hợp font có thể là rất lớn, vì ít người có danh sách font giống hệt nhau, đặc biệt trên các phiên bản hệ điều hành khác nhau. Một font hiếm (ví dụ, font cụ thể cho thiết kế) ngay lập tức làm cho dấu vân tay trở nên độc nhất, khiến dữ liệu font vô cùng hữu ích cho việc lấy dấu vân tay. Việc thu thập font không thực hiện ngay tức thì, vì vậy một số kịch bản lưu trữ kết quả dấu vân tay.
Lấy dấu vân tay trên Canvas
Đây là một phương pháp lấy dấu vân tay nổi tiếng sử dụng thẻ HTML5 <canvas> để có được các đặc điểm vẽ duy nhất. Trình duyệt vẽ nội dung (thường là văn bản với một font và màu sắc cụ thể, đôi khi là hình học) trên một canvas ảo, sau đó kịch bản gọi canvas.toDataURL(), để có được bitmap của nội dung đã vẽ. Hình ảnh được biểu diễn dưới dạng một chuỗi base64, được băm để tạo ra một dấu vân tay Canvas.
Tại sao nó duy nhất? Những khác biệt nhỏ trong hệ thống — các thuật toán làm mượt font, phiên bản driver GPU, nền tảng (Linux so với Windows) — sản sinh ra sự biến đổi tinh vi trong hình ảnh cuối cùng. Thường thì văn bản với các ký tự đa dạng (chữ cái có hình dạng khác nhau, ký hiệu đặc biệt) được vẽ để làm tối đa hóa hiệu ứng làm mượt. Kịch bản có thể vẽ các hình chữ nhật màu, áp dụng các biến đổi hoặc đổ bóng để thực hiện các chức năng đồ họa. Các thiết bị khác nhau tạo ra các hình ảnh khác nhau từ cùng mã vẽ. Dấu vân tay Canvas có thể thay đổi sau khi cập nhật driver GPU hoặc chuyển từ đồ họa tích hợp sang đồ họa rời. Kết hợp với WebGL, tuy nhiên, nó trở nên vô cùng giá trị.

Lấy dấu vân tay WebGL
WebGL là một API để thực hiện đồ họa 3D trong trình duyệt (cung cấp khả năng truy cập vào OpenGL/ES). Nó cung cấp hai loại dữ liệu chính để lấy dấu vân tay:
Các chỉ định trực tiếp GPU
Tiện ích mở rộng WEBGL_debug_renderer_info cho phép một kịch bản lấy chuỗi UNMASKED_VENDOR_WEBGL và UNMASKED_RENDERER_WEBGL từ ngữ cảnh WebGL — những chuỗi này thường liệt kê nhà sản xuất và mô hình GPU (ví dụ: Intel Inc., Đồ họa Intel Iris Plus 640, hoặc NVIDIA Corporation, GeForce GTX 1070). Những giá trị này thực tế tiết lộ mô hình card đồ họa của người dùng. Hầu hết các trình duyệt cho phép điều này ở chế độ tiêu chuẩn (trừ Tor). Mô hình GPU tăng thêm entropy đáng kể: ngay cả khi hai người dùng có cùng hệ điều hành và trình duyệt, một với Đồ họa Intel HD và một với RTX 3080 sẽ có dấu vân tay khác biệt.
Các hằng số và khả năng của WebGL
Ngay cả khi không có tên GPU trực tiếp, ngữ cảnh WebGL giữ nhiều tham số phụ thuộc vào driver và phần cứng: số lượng đơn vị kết cấu tối đa, giới hạn kích thước hình học, hỗ trợ đổ bóng và khử răng cưa, và các hằng số số học khác. Một kịch bản có thể tuần tự gọi gl.getParameter(...) cho các hằng số khác nhau và thu thập kết quả. Ví dụ, MAX_VERTEX_UNIFORM_VECTORS có thể là 4.096 trên một card và 1.024 trên card khác, v.v. Kết quả là một vector dài các số, một dạng hồ sơ của hệ thống đồ họa. Hồ sơ như vậy thường độc nhất cho một thiết bị và có thể khác ngay cả giữa những mô hình GPU tương tự.

Hơn nữa, WebGL có thể được sử dụng giống như Canvas: tức là bằng cách vẽ một cảnh 3D phức tạp và lấy hình ảnh raster của nó. Cách tiếp cận này có thể tiết lộ ngay cả sự khác biệt tinh vi hơn (ví dụ, trong các triển khai shader). Trong thực tế, các thư viện như FingerprintJS thường giới hạn mình chỉ đọc UNMASKED_RENDERER (vì nó đơn giản và đáng tin cậy hơn), nhưng một số kịch bản cũng băm một hình dạng 3D đã vẽ để có được sự ổn định cao hơn. Dữ liệu WebGL tăng đáng kể độ độc nhất của dấu vân tay, đặc biệt trên các thiết bị di động: ví dụ, trước đây rất khó phân biệt giữa các iPhone (tất cả đều có đầu ra Canvas giống hệt nhau do có cùng GPU), nhưng bây giờ phiên bản GPU có thể tiết lộ mô hình iPhone nếu WebGL được bật. Kết hợp với Canvas, WebGL cung cấp một nguồn entropy mạnh. Đó là lý do tại sao các trình duyệt trong các chế độ định hướng bảo mật cố gắng giấu hoặc giả mạo dữ liệu này.
Lấy dấu vân tay Ngữ cảnh âm thanh
Một phương pháp lấy dấu vân tay tinh vi khác sử dụng Web Audio API để tạo ra một dấu vân tay âm thanh duy nhất của thiết bị. Nó dựa trên thực tế rằng việc tạo ra và xử lý âm thanh khác nhau một chút giữa các hệ thống (do các triển khai thư viện, sử dụng chỉ dẫn SIMD, các điểm không chính xác trong tính toán thập phân, v.v.). Trong thực tế, giá trị dấu vân tay Ngữ cảnh âm thanh khác nhau đáng kể giữa các trình duyệt; mỗi "trình duyệt + hệ điều hành + phần cứng" kết hợp sản sinh ra kết quả xác định của riêng mình (miễn là trình duyệt hoặc hệ điều hành không bị thay đổi đáng kể). Thêm một dấu vân tay âm thanh làm mạnh mẽ hơn sự nhận diện: ngay cả khi đầu ra Canvas và WebGL vô tình trùng khớp, dấu vân tay âm thanh vẫn có thể phân biệt các thiết bị.
Các thiết bị và cảm biến phương tiện
Trong khi lấy dấu vân tay, một kịch bản cũng có thể thu thập thông tin về phần cứng ngoại vi:
Qua
navigator.mediaDevices.enumerateDevices(), nó có thể lấy danh sách các thiết bị phương tiện của người dùng (cameras, microphones). Trình duyệt thường trả lại dữ liệu giới hạn, chẳng hạn, "hai cameras và một microphone" mà không có tên hoặc ID trừ khi được cấp quyền. Tuy nhiên, chỉ số lượng thiết bị đã có thể đóng vai trò làm yếu tố phân biệtCác API như Trạng thái Pin (mức pin còn lại) từng có sẵn và cũng được sử dụng cho việc lấy dấu vân tay. Mức pin và thời gian còn lại sản sinh ra các tổ hợp độc nhất. Vì các API này có thể cung cấp quá nhiều định danh chính xác (một vấn đề về riêng tư), chúng hiện bị giới hạn hoặc yêu cầu quyền truy cập.
Cảm biến (Hướng, Chuyển động): sự hiện diện của một số cảm biến và định dạng đầu ra của chúng có thể khác nhau trên các thiết bị (ví dụ, tốc độ làm tươi của con quay hồi chuyển). Những tín hiệu này khá hiếm gặp nhưng chúng vẫn có thể lý thuyết bổ sung cho dấu vân tay.
Tổng thể, thiết bị càng không thông thường, nó càng tiết lộ thông qua các API như vậy. Nếu một người dùng hoàn toàn không có camera hoặc microphone, điều đó đã phân biệt họ khỏi hầu hết các máy tính xách tay, mà hầu hết luôn có webcam.
Tất cả các yếu tố kể trên - cả thuộc tính chủ động và thụ động - tạo thành một bộ các đặc điểm của trình duyệt và hệ thống. Trong thực tế, các kịch bản thu thập từ 10–30 tham số và biên soạn chúng thành một cấu trúc (ví dụ, một đối tượng hoặc một mảng chuỗi), sau đó được chuyển đổi thành một hàm băm. Nhiều thư viện sử dụng các thuật toán hàm băm nhanh như MurmurHash để tạo ra một định danh nhỏ gọn từ khoảng 500 byte của dữ liệu thuộc tính. Kết quả là một chuỗi (ví dụ, a3f6e9b12d4...) có thể được lưu trữ trên máy chủ như mã định danh thiết bị.

Bảo vệ chống lại lấy dấu vân tay trình duyệt
Các trình duyệt hiện đại thực hiện các biện pháp đối kháng khác nhau nhằm chống lại việc lấy dấu vân tay. Ví dụ, Trình duyệt Tor cố gắng làm cho tất cả người dùng trông giống hệt nhau (User-Agent giống nhau, kích thước cửa sổ cố định, bộ font thống nhất, Canvas và Âm thanh Ngữ cảnh bị vô hiệu hóa, v.v.). Nó thậm chí cảnh báo người dùng không nên tối đa hóa cửa sổ nếu họ muốn duy trì ẩn danh.
Firefox bao gồm cài đặt privacy.resistFingerprinting, cũng để làm trung bình giá trị. Brave chặn trình theo dõi bên thứ ba mặc định và chèn nhiễu vào các API. Có các tiện ích mở rộng như CanvasBlocker hoặc Privacy Badger mà phá vỡ có chọn lọc các kịch bản theo dõi.
Tuy nhiên, không có phương pháp nào cung cấp 100% bảo vệ — quá nhiều tham số được trình duyệt công khai. Đáp lại nhu cầu ngày càng tăng về ẩn danh, trình duyệt chống phát hiện (như Octo Browser, MultiLogin, và Dolphin {anty}) đã xuất hiện, cho phép người dùng giả lập các dấu vân tay khác nhau và tạo ra hàng chục nhận dạng “ảo” với các tham số riêng biệt cho, ví dụ, các mục đích tiếp thị liên kết.
Cuộc đua đã bắt đầu từ nhiều năm trước tiếp tục: các trình theo dõi phát triển các kỹ thuật mới, và các trình duyệt phát minh ra các biện pháp đối kháng mới. Người dùng bình thường rõ ràng bị mất trong cuộc đua này — nếu một người không chủ động quan tâm đến riêng tư, bất kỳ trang web nào cũng có thể nắm bắt dấu vân tay kỹ thuật số của họ và đối chiếu nó với dữ liệu từ các nguồn khác.
Một dấu vân tay bao gồm nhiều thành phần, mỗi cái tăng một mức độ độc nhất. Hy vọng rằng, sự giải thích này đã giúp bạn hiểu rõ cách mà trình duyệt của bạn có thể được xác định bởi các trang web — vì hiểu rõ cách công nghệ hoạt động là bước đầu tiên để biết được nơi mà ranh giới nằm giữa sự tiện lợi của cá nhân hóa và bảo vệ dữ liệu cá nhân.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Các bài viết liên quan
Các bài viết liên quan
Các bài viết liên quan

Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.

Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.
Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.


