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ặt | Clearcote làm gì |
|---|---|
| Đọc lại Canvas 2D và WebGL | Noise 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 WebGL | Mộ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 |
| WebGPU | Cùng adapter với WebGL, nên theo mặc định cả hai API đều nêu tên cùng một GPU |
| Audio | Sample rate và độ trễ của AudioContext theo persona; sample đã render được giữ chính xác |
| Font và giọng đọc | Bộ font và bộ giọng đọc của persona |
| Phần cứng và màn hình | hardwareConcurrency, 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 gian | Accept-Language, navigator.language, Intl và múi giờ khớp nhau |
| User agent và client hint | Brand, phiên bản, platform, bitness và model, lấy từ engine |
| TLS | ClientHello theo đúng phiên bản Chrome mà persona khai báo |
| Dấu hiệu automation | navigator.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óiCâ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
Mỗi tài khoản một seed: cùng một thiết bị ở mọi phiên, một thiết bị khác cho tài khoản tiếp theo, với cookie và storage được giữ lại giữa các lần chạy.
TLS handshake và frame HTTP/2 đến từ network stack của chính Chromium, và các trường phụ thuộc phiên bản theo đúng phiên bản Chrome mà persona của bạn khai báo.
Chuyển tiếp các thao tác canvas và WebGL tới một máy từ xa có GPU thật, để pixel mà trang đọc lại khớp với GPU mà persona của bạn khai báo.
Đặt proxy và bật geoip, múi giờ, ngôn ngữ và WebRTC sẽ theo IP đầu ra. SOCKS5 có username và password dùng được trực tiếp trên bản build có giấy phép.
Bài đọc 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ẻ.