Chuyển đến nội dung
Danh tính · biên dịch sẵn trong engine

Kiểm soát dấu vân tay trình duyệt ngay trong engine

Dấu vân tay trình duyệt là hàng chục giá trị phải hợp lý khi đặt cạnh nhau. Clearcote suy ra chúng từ một seed và trả về qua chính các code path của Chromium, nên một trang đọc GPU, màn hình và font sẽ nhận được những câu trả lời thuộc về cùng một cỗ máy hợp lý, với ngôn ngữ và múi giờ được đặt cho khớp: trong main frame, trong iframe và trong worker.

Persona theo seed và noise theo từng site có ở mọi gói, kể cả bản build mở.

Một seed, một danh tính

import { launch } from "clearcote";

// the same seed returns the same identity; a new seed is a new one
const browser = await launch({
  fingerprint: "account-42",
  timezone: "America/New_York",
  acceptLanguage: "en-US,en",
});

Điểm nổi bật

Một seed, một cỗ máy

--fingerprint suy ra một persona có các giá trị tương quan với nhau: phân khúc CPU và bộ nhớ, màn hình, độ sâu màu, GPU, giọng đọc, codec và thiết bị media, tất cả đều khớp nhau.

Theo từng site, không phải toàn cục

Noise của canvas và WebGL được suy ra theo từng site, dựa trên mô hình farbling của Brave, nên các hash đó khác nhau giữa các site, trong khi phần cứng mà persona báo cáo vẫn giữ nguyên ở mọi nơi, như một máy thật duy nhất.

Native trong mọi realm

Giá trị đến từ các getter C++, nên toString, property descriptor và cả iframe hay worker mới tạo đều thấy native code và cùng một câu trả lời.

Một GPU trước sau như một

Vendor và renderer WebGL giữ cố định trong suốt phiên, các giới hạn getParameter bám theo GPU đó trong phạm vi máy này đáp ứng được, và WebGPU mô tả cùng một adapter.

Import một máy thật

Nạp một profile thu thập từ Chrome thật, hoặc chọn một profile trong thư viện profile mở, và các giá trị của nó sẽ thay thế các giá trị tổng hợp.

Giảm bớt ở nơi cần thiết

lightStealth chỉ thay đổi những metadata an toàn. fingerprintNoise: false giữ nguyên danh tính và bỏ noise canvas và WebGL ở những nơi chính noise bị chấm điểm.

Vì sao tính nhất quán quan trọng hơn những giá trị khéo léo

Việc phát hiện hiếm khi xoay quanh một giá trị bất thường đơn lẻ. Nó tìm những mâu thuẫn: chuỗi GPU không khớp với pixel, múi giờ không khớp với IP, worker báo cáo phần cứng khác với trang. Vì vậy câu hỏi mà Clearcote trả lời không phải là nên giả những giá trị nào, mà là làm sao giữ tất cả chúng nhất quán với nhau và với máy bên dưới.

Seed có tính tất định. Cùng một seed tạo ra cùng một danh tính ở mọi lần khởi chạy, như một khách truy cập quay lại, còn seed mới tạo ra một danh tính mới. Kết quả đọc lại Canvas 2D và WebGL mang một nhiễu nhỏ theo từng seed và từng site, vì kết quả đọc lại vốn đã khác nhau giữa các máy thật. Audio đã render và client rect được cố ý giữ chính xác: làm nhiễu chúng sẽ tạo ra những giá trị mà không trình duyệt thật nào tạo ra, một tín hiệu còn dễ nhận ra hơn việc hai profile có chung một hash. Tài liệu fingerprint phân tích lần lượt từng bề mặt.

Có những điều được khai báo mà máy host không thể đáp ứng, và tài liệu nói rõ điều đó. Kích thước màn hình không khớp với cửa sổ thật, hay một GPU mà máy không thực sự render được, sẽ bị kiểm tra đối chiếu với máy host và thất bại. Đó là lý do lightStealth giữ màn hình thật và việc ghi đè màn hình chỉ bật khi bạn chọn, lý do canvas bridge tồn tại, và lý do cấu hình khởi đầu được khuyến nghị thay đổi ít hơn chứ không phải nhiều hơn.

Những gì được bao phủ

Bề mặtClearcote làm gì
Đọc lại Canvas 2D và WebGLNoise theo từng seed, từng site, nằm trong biên độ dao động tự nhiên giữa các máy thật
Renderer và giới hạn WebGLMột GPU cố định trong suốt phiên, với các giới hạn tham số của GPU đó ở mọi chỗ máy này đáp ứng được
WebGPUCùng adapter với WebGL, nên theo mặc định cả hai API đều nêu tên cùng một GPU
AudioSample rate và độ trễ của AudioContext theo persona; sample đã render được giữ chính xác
Font và giọng đọcBộ font và bộ giọng đọc của persona
Phần cứng và màn hìnhhardwareConcurrency, deviceMemory, pixel ratio, độ sâu màu, số điểm chạm, cùng màn hình và vùng làm việc của persona (lightStealth giữ màn hình thật)
Locale và thời gianAccept-Language, navigator.language, Intl và múi giờ khớp nhau
User agent và client hintBrand, phiên bản, platform, bitness và model, lấy từ engine
TLSClientHello theo đúng phiên bản Chrome mà persona khai báo
Dấu hiệu automationnavigator.webdriver và các dấu hiệu của headless

Danh sách đầy đủ các switch và tác dụng của từng switch có trong tham chiếu flag fingerprint.

Mọi người dùng nó để làm gì

Quyền riêng tư

Một trình duyệt thông thường báo cáo tổ hợp giá trị của chính máy bạn. Một persona báo cáo một cỗ máy hợp lý, nhất quán, nhưng không phải của bạn.

Tách biệt danh tính

Cho mỗi tài khoản một seed riêng, để các tài khoản không dùng chung một rendering fingerprint.

Test code có xử lý fingerprint

Xem code chống gian lận, analytics hay cá nhân hóa của chính bạn phản ứng thế nào với các phần cứng, GPU và locale khác nhau.

Nghiên cứu fingerprinting

Tái hiện những gì một trang test đo được, với đầu vào có kiểm soát và lặp lại được.

Clearcote được xây dựng cho quyền riêng tư, kiểm thử, nghiên cứu và tự động hóa hợp pháp. Bạn chịu trách nhiệm về cách mình sử dụng nó và về việc tuân thủ điều khoản của các trang web bạn truy cập.

Gói nào có tính năng này

Persona theo seed, noise theo từng site, ghi đè metadata và khớp TLS có ở mọi gói, kể cả bản build mở. Bản build có giấy phép (miễn phí với GitHub) bổ sung một vài switch tinh chỉnh sâu hơn, hành vi chân thực hơn và nhận các bản Chromium major mới trước tiên; còn Pro không mở khóa thêm khả năng giả mạo nào mà gói Miễn phí với GitHub không có.

So sánh các gói

Câu hỏi thường gặp

Giả mạo dấu vân tay trình duyệt là gì?

Là việc thay đổi các giá trị mà website đọc để nhận diện trình duyệt: GPU, màn hình, font, phần cứng, ngôn ngữ, v.v. Hầu hết công cụ làm điều này bằng cách ghi đè các thuộc tính JavaScript. Clearcote làm việc đó ngay trong engine Chromium, nên các giá trị đến từ native code và luôn nhất quán với nhau.

Sao không dùng công cụ giả mạo fingerprint bằng JavaScript?

Hàm bị ghi đè sẽ tự để lộ mình. toString trả về mã nguồn của bản ghi đè thay vì [native code], property descriptor bị thay đổi, và một iframe hay worker mới tạo sẽ trả lại giá trị gốc. Clearcote không có lớp nào như vậy để bị tìm ra. Xem cơ chế phát hiện hoạt động ra sao.

Cùng một seed có luôn cho ra cùng một fingerprint không?

Có. Seed suy ra persona và noise theo từng site một cách tất định (deterministic), nên cùng một seed là cùng một danh tính ở mọi lần khởi chạy, còn seed mới là một danh tính mới.

Hai tài khoản trên cùng một máy có thể có canvas fingerprint khác nhau không?

Có, với các seed khác nhau: kết quả đọc lại canvas và WebGL khác nhau theo từng seed. Profile thiết bị được import chỉ thay đổi các giá trị được báo cáo, không thay đổi phần render, nên hãy dùng seed riêng cho mỗi tài khoản để tách biệt phần render. Audio đã render và client rect đến từ máy bên dưới, nên giống nhau với mọi danh tính chạy trên máy đó.

Điều này có khiến automation không thể bị phát hiện không?

Không công cụ nào có thể hứa điều đó, và chúng tôi cũng không hứa. Clearcote loại bỏ những mâu thuẫn mà một trình duyệt bị giả mạo thường mang theo. Hành vi, uy tín IP và cách bạn sử dụng vẫn là yếu tố quan trọng. Bài kiểm tra fingerprint cho bạn thấy cấu hình của chính bạn trông như thế nào.

Tìm hiểu sâu hơn trong tài liệu

Tính năng liên quan

Dùng thử Clearcote

Thay thế drop-in cho Playwright & Puppeteer, nhất quán đến tận TLS handshake, với một bản build mã nguồn mở để bắt đầu.

Miễn phí cho một trình duyệt với GitHub. Không cần thẻ.