Tạo vân tay số

Vân tay số có nghĩa là cố gắng nhận dạng một người dùng khi họ quay lại trang web của bạn hoặc xác định cùng một người dùng trên các trang web khác nhau. Nhiều đặc điểm có thể khác nhau giữa chế độ thiết lập của bạn và của người khác. Ví dụ: bạn có thể đang dùng loại thiết bị khác và trình duyệt khác, có kích thước màn hình khác và cài đặt phông chữ khác nhau. Nếu tôi đã cài đặt phông chữ "Dejavu Sans" mà bạn chưa cài đặt, thì bất kỳ trang web nào cũng có thể phân biệt giữa bạn và tôi bằng cách kiểm tra phông chữ đó. Đây là cách hoạt động của vân tay số; bạn sẽ tạo một tập hợp các điểm dữ liệu này, đồng thời mỗi điểm cung cấp thêm nhiều cách để phân biệt người dùng.

Một định nghĩa chính thức hơn có thể có dạng như sau: Vân tay số là hành động sử dụng các đặc điểm rõ ràng, lâu dài về thiết lập của người dùng nhằm phân biệt họ với nhiều người dùng khác nhất có thể.

Tại sao việc tạo vân tay số lại cản trở quyền riêng tư của người dùng

Có một số trường hợp đặc biệt mà việc tạo vân tay số cho người dùng có vai trò quan trọng, chẳng hạn như phát hiện gian lận. Tuy nhiên, tạo vân tay số cũng có thể được sử dụng để theo dõi người dùng trên các trang web. Việc theo dõi thường được thực hiện khi chưa được người dùng đồng ý hoặc trong một số trường hợp do sự đồng ý không hợp lệ mà không cung cấp thông tin đầy đủ cho người dùng. Khi làm xong việc đó, những người dùng đó thường sẽ thấy điều này hơi khó chịu và cảm thấy bị phản bội.

Vân tay số nghĩa là tìm các cách để ngầm phân biệt người dùng này với người dùng khác. Bạn có thể sử dụng vân tay số để nhận ra rằng đó vẫn là cùng một người dùng trên cùng một trang web hoặc để nhận ra cùng một người dùng trong hai hồ sơ trình duyệt khác nhau cùng lúc. Điều này có nghĩa là tạo vân tay số có thể được sử dụng để theo dõi người dùng trên các trang web. Các phương pháp theo dõi tất định và công khai, chẳng hạn như lưu trữ cookie có một mã nhận dạng người dùng riêng biệt, có thể được người dùng quan sát và kiểm soát ở một mức độ nào đó (và mô-đun trước đã giải thích một số phương pháp này). Nhưng chính xác thì khó tránh được tạo vân tay số vì nó bí mật; nó dựa trên các đặc điểm không thay đổi và rất có thể xảy ra không nhìn thấy được. Đây là lý do tại sao tính năng này được gọi là "vân tay". Tốt nhất là bạn khó có thể thay đổi vân tay của mình, dù là vân tay số hay vân tay ở hai đầu ngón tay.

Các nhà cung cấp trình duyệt biết rằng người dùng không thích bị theo dõi và liên tục triển khai các tính năng để hạn chế tạo vân tay số (một số tính năng chúng tôi đã thấy trong mô-đun trước). Ở đây, chúng tôi sẽ xem xét tác động của các tính năng này đến các yêu cầu của doanh nghiệp và cách bạn vẫn muốn thực hiện những điều bạn muốn theo cách bảo vệ quyền riêng tư. Phần này tập trung hơn vào cách tính năng bảo vệ trình duyệt chống lại vân tay số sẽ ảnh hưởng đến những gì bạn làm và cách thức, chứ không phải là về cách ngăn bạn thực hiện vân tay số.

Trong thực tế, hầu hết các nhà phát triển và doanh nghiệp không cần tạo vân tay số cho người dùng. Nếu ứng dụng của bạn yêu cầu người dùng đăng nhập, thì tức là người dùng sẽ xác định danh tính của chính bạn với bạn, khi có sự đồng ý của họ và theo cách mà họ có thể đơn phương chọn không tham gia bất cứ lúc nào họ chọn. Đây là một phương thức bảo vệ quyền riêng tư để nắm được người dùng nào đã đăng nhập. Ứng dụng của bạn có thể không yêu cầu người dùng đăng nhập, điều này thậm chí còn giúp bảo vệ quyền riêng tư của người dùng hiệu quả hơn (và sau đó bạn sẽ chỉ thu thập dữ liệu bạn cần).

Nên

Đánh giá khả năng tạo vân tay số của bên thứ ba. Trong mô-đun bên thứ ba, bạn có thể đã có danh sách các dịch vụ bên thứ ba mà bạn bao gồm và các yêu cầu web mà họ đưa ra. Bạn có thể kiểm tra các yêu cầu đó để xem dữ liệu nào đang được trả về cho người tạo yêu cầu, nếu có. Tuy nhiên, việc này thường khó khăn; về bản chất, tạo vân tay là một quy trình bí mật bao gồm việc yêu cầu dữ liệu không cần phải được người dùng chấp thuận.

Bạn cũng nên đọc chính sách quyền riêng tư của các dịch vụ và phần phụ thuộc bên thứ ba để tìm các chỉ báo về việc tạo vân tay số đang được sử dụng. Đôi khi, tính năng này được gọi là "so khớp xác suất" hoặc là một phần của bộ kỹ thuật so khớp xác suất, trái ngược với "so khớp xác định".

Cách tạo vân tay số hoạt động

Thông thường, tổ hợp cá nhân của tất cả các thuộc tính này là duy nhất đối với bạn hoặc ít nhất là đối với một nhóm nhỏ những người tương tự nhau; dữ liệu này có thể được dùng để bí mật theo dõi bạn.

Ngoài ra: tạo vân tay số thụ động và chủ động

Có một sự khác biệt hữu ích ở đây giữa kỹ thuật tạo vân tay thụ động và chủ động. Kỹ thuật tạo vân tay số thụ động là một kỹ thuật sử dụng thông tin được cung cấp cho trang web theo mặc định. Kỹ thuật tạo vân tay số chủ động là kỹ thuật truy vấn trình duyệt để lấy thêm thông tin một cách rõ ràng. Lý do quan trọng của sự khác biệt này là các trình duyệt có thể cố gắng phát hiện và chặn hoặc giảm thiểu các kỹ thuật chủ động. API có thể bị hạn chế hoặc đặt vào cổng phía sau một hộp thoại yêu cầu người dùng cấp quyền (từ đó thông báo cho người dùng về việc các API đó đang được sử dụng hoặc cho phép người dùng từ chối API theo mặc định). Kỹ thuật thụ động là một kỹ thuật sử dụng dữ liệu đã được cung cấp cho trang web, thường là vì trong quá khứ, trong những ngày đầu của siêu cao tốc thông tin, thông tin đó đã được cung cấp cho tất cả các trang web. Chuỗi tác nhân người dùng là một ví dụ về trường hợp này. Chúng ta sẽ xem xét điều này kỹ hơn. Ứng dụng này được coi là hữu ích trong việc cung cấp khá nhiều thông tin về trình duyệt, phiên bản và hệ điều hành của người dùng, để một trang web có thể chọn trình bày nhiều nội dung dựa trên những thông tin đó. Tuy nhiên, việc này cũng làm tăng số lượng thông tin phân biệt được cung cấp, thông tin giúp xác định người dùng này với người dùng khác; và do đó, thông tin như vậy ngày càng không còn tồn tại hoặc ít nhất là bị treo để không còn phân biệt được nữa. Nếu việc bạn làm dựa vào thông tin này (ví dụ: nếu bạn lấy nhiều nhánh mã tuỳ thuộc vào tác nhân người dùng), thì mã này có thể bị hỏng khi các trình duyệt ngày càng đóng băng hoặc ngừng thông tin đó. Kiểm thử là biện pháp phòng thủ hiệu quả nhất ( xem sau).

Ngoài ra: đo lường khả năng tạo vân tay

Phép đo kỹ thuật để đo lường lượng thông tin mà mỗi điểm dữ liệu cung cấp được gọi là entropy và được đo bằng bit. Một tính năng có nhiều giá trị có thể có (chẳng hạn như danh sách phông chữ đã cài đặt) có thể đóng góp nhiều bit vào tổng số, trong đó một tính năng không có nhiều khả năng phân biệt (chẳng hạn như hệ điều hành bạn đang sử dụng) có thể chỉ thêm một vài giá trị. HTTP Almanac mô tả cách các thư viện tạo vân tay số hiện có tự động hoá quy trình kết hợp phản hồi từ nhiều API khác nhau vào một "hàm băm", tức là chỉ xác định được một nhóm nhỏ người dùng, thậm chí có thể chỉ một người dùng. Maud Nalpas trình bày chi tiết về vấn đề này trong video này trên YouTube. Nhưng tóm lại, hãy tưởng tượng rằng bạn đã thấy một danh sách bạn bè có bản nhạc yêu thích, món ăn yêu thích và ngôn ngữ họ nói... nhưng bị xoá tên. Nhiều khả năng là danh sách của một người bất kỳ sẽ nhận dạng duy nhất họ trong số bạn bè của bạn hoặc ít nhất là thu hẹp danh sách xuống chỉ một vài người. Đây là cách tạo vân tay số hoạt động; danh sách những nội dung bạn thích sẽ trở thành "băm". Với hàm băm đó, việc xác định một người dùng là cùng một người trên hai trang web khác nhau chưa được kết nối sẽ trở nên dễ dàng hơn. Mục tiêu của hoạt động theo dõi là tránh né mong muốn của người dùng về quyền riêng tư.

Trình duyệt làm gì chống lại việc tạo vân tay số?

Quan trọng là các nhà cung cấp trình duyệt biết rất nhiều cách để một trang web (hoặc một bên thứ ba có trên trang web) tính toán dấu vân tay riêng cho người dùng, hoặc để các bit thông tin khác nhau góp phần tạo nên tính riêng biệt của vân tay số đó. Có một số cách trong số này mang tính rõ ràng và có chủ ý, chẳng hạn như chuỗi tác nhân người dùng của trình duyệt, thường xác định trình duyệt, hệ điều hành và phiên bản đang được sử dụng (và do đó góp phần phân biệt bạn với tôi nếu bạn và tôi đang sử dụng các trình duyệt khác nhau). Một số cách không được cố ý tạo ra để có thể tạo vân tay số mà cuối cùng cũng được tạo ra, chẳng hạn như danh sách phông chữ, hoặc các thiết bị video và âm thanh có sẵn cho trình duyệt. (Trình duyệt không phải sử dụng các thiết bị này, chỉ cần lấy danh sách các thiết bị theo tên.) Ngoài ra, một số đối tượng đã được thiết lập để trở thành người đóng góp cho vân tay sau khi phát hành, chẳng hạn như kết xuất pixel chính xác để khử răng cưa của phông chữ trên phần tử canvas. Còn có nhiều cách khác và mỗi cách mà trình duyệt của bạn khác với trình duyệt của tôi sẽ bổ sung entropy nên có thể góp phần vào cách phân biệt giữa bạn và tôi, đồng thời xác định một người độc đáo nhất có thể trên các trang web. https://amiunique.org có một danh sách dài (nhưng chắc chắn không đầy đủ) về các tính năng đóng góp vân tay tiềm năng và danh sách này luôn gia tăng (vì người dùng không muốn họ quan tâm nhiều đến tiền, vì người dùng không muốn người dùng thực sự quan tâm đến vân tay số), mà còn có nhiều cách khác nữa.

Không hỗ trợ một số API mạnh mẽ

Phản hồi của các nhà cung cấp trình duyệt đối với tất cả các phương pháp tính toán vân tay số này là để tìm cách giảm lượng entropy có sẵn từ các API này. Tuỳ chọn hạn chế nhất là không triển khai các quảng cáo đó ngay từ đầu. Một số trình duyệt chính đã thực hiện việc này đối với nhiều API phần cứng và thiết bị (chẳng hạn như quyền truy cập NFC và Bluetooth qua các ứng dụng web phía máy khách), trong đó vấn đề tạo vân tay số và quyền riêng tư được trích dẫn là lý do chúng chưa được triển khai. Rõ ràng điều này có thể ảnh hưởng đến các ứng dụng và dịch vụ của bạn: bạn không thể sử dụng API trong trình duyệt không triển khai API này và điều này có thể hạn chế hoặc loại bỏ hoàn toàn một số phương pháp tiếp cận phần cứng khỏi việc xem xét.

Cổng quyền của người dùng

Phương pháp thứ hai mà các nhà cung cấp trình duyệt thực hiện là ngăn chặn các hoạt động truy cập API hoặc dữ liệu mà không có sự cho phép rõ ràng của người dùng. Phương pháp này cũng thường được áp dụng vì lý do bảo mật — một trang web sẽ không thể chụp ảnh bằng webcam nếu bạn không cho phép! Nhưng ở đây, quyền riêng tư và bảo mật có thể có các mối quan tâm tương tự. Tất nhiên, việc xác định vị trí của ai đó là một hành vi vi phạm quyền riêng tư, nhưng nó cũng là một yếu tố góp phần tạo nên tính độc đáo của vân tay số. Việc yêu cầu quyền xem vị trí định vị vị trí không làm giảm thêm entropy mà một vị trí làm tăng thêm tính độc đáo của vân tay số đó, nhưng về cơ bản, việc này sẽ loại bỏ việc sử dụng tính năng định vị vị trí cho vân tay số vì tính năng này không còn được thực hiện một cách bí ẩn nữa. Toàn bộ điểm mấu chốt của việc tạo vân tay số là để ẩn thận phân biệt người dùng với nhau. Nếu đã sẵn sàng để người dùng biết rằng bạn đang cố gắng xác định họ thì bạn không cần kỹ thuật tạo vân tay số: hãy để người dùng tạo một tài khoản rồi đăng nhập bằng tài khoản đó.

Thêm tình trạng khó dự đoán

Phương pháp thứ ba được thực hiện trong một số trường hợp là để các nhà cung cấp trình duyệt "làm mờ" phản hồi của các API, qua đó giảm chi tiết hơn và do đó giảm khả năng nhận dạng. Cơ chế này được mô tả là một phần của cơ chế phản hồi ngẫu nhiên trong mô-đun dữ liệu. Bạn có thể làm những việc này khi thu thập dữ liệu từ người dùng, để tránh vô tình thu thập dữ liệu đang dùng để nhận dạng. Các nhà cung cấp trình duyệt có thể áp dụng phương pháp này đối với dữ liệu API được cung cấp cho các ứng dụng web và bên thứ ba. Ví dụ: API thời gian rất chính xác dùng để đo lường hiệu suất trang từ window.performance.now(). Trình duyệt biết các giá trị này thành độ chính xác một micrô giây, nhưng các giá trị được trả về có chủ ý giảm độ chính xác bằng cách làm tròn đến ranh giới 20 micro giây gần nhất để tránh sử dụng các giá trị này trong việc tạo vân tay số (và cũng để bảo mật nhằm tránh các cuộc tấn công về thời gian). Mục tiêu ở đây là đảm bảo các API vẫn hữu ích, nhưng làm cho các phản hồi ít nhận dạng hơn: về cơ bản, bạn phải tạo ra "khả năng miễn dịch cộng đồng" bằng cách làm cho thiết bị của bạn trông giống với thiết bị của mọi người khác hơn là riêng biệt với bạn. Safari giới thiệu phiên bản cấu hình hệ thống đơn giản vì lý do này.

Thực thi ngân sách quyền riêng tư

Ngân sách về quyền riêng tư là một đề xuất cho thấy các trình duyệt ước tính thông tin được tiết lộ qua từng bề mặt tạo vân tay số. Tính năng này chưa được triển khai trong các trình duyệt. Mục tiêu là cho phép các API mạnh mẽ trong khi vẫn bảo vệ quyền riêng tư của người dùng. Tìm hiểu thêm về đề xuất ngân sách quyền riêng tư.

Sử dụng môi trường kiểm thử rộng

Tất cả những yếu tố này sẽ ảnh hưởng đến cách bạn xây dựng ứng dụng và dịch vụ. Cụ thể, có rất nhiều phản hồi và phương pháp tiếp cận trên các trình duyệt và nền tảng trong lĩnh vực này. Điều này có nghĩa là việc kiểm thử công việc trong nhiều môi trường là rất quan trọng. Tất nhiên, điều này luôn quan trọng, nhưng có thể hợp lý khi giả định rằng hiển thị HTML hoặc CSS sẽ không đổi đối với một công cụ kết xuất nhất định, bất kể công cụ đó thuộc trình duyệt hay nền tảng nào (và vì vậy, bạn có thể chỉ muốn thử nghiệm trong một trình duyệt dựa trên Nhấp nháy chẳng hạn). Điều này hoàn toàn không đúng đối với việc sử dụng API vì các trình duyệt dùng chung công cụ kết xuất có thể khác nhau đáng kể về cách các trình duyệt này tăng cường bề mặt API để chống lại vân tay số.

Nên

  • Xem số liệu phân tích và đối tượng của riêng bạn để định hướng nhóm trình duyệt bạn nên ưu tiên khi thử nghiệm.
  • Một bộ trình duyệt phù hợp để thử nghiệm là Firefox, Chrome, Edge, Safari trên máy tính, Chrome và Samsung Internet trên Android và Safari trên iOS. Điều này đảm bảo bạn sẽ kiểm thử trên 3 công cụ kết xuất chính (Gecko trong Firefox, nhiều nhánh của Blink trong Chrome, Edge và Samsung Internet và Webkit trong Safari) cũng như trên cả nền tảng dành cho thiết bị di động và máy tính.
  • Nếu trang web của bạn cũng có thể được sử dụng trên các thiết bị ít phổ biến hơn, chẳng hạn như máy tính bảng, đồng hồ thông minh hoặc máy chơi trò chơi, hãy thử nghiệm trên các thiết bị đó. Một số nền tảng phần cứng có thể cập nhật trình duyệt cho thiết bị di động và máy tính, tức là một số API có thể chưa được triển khai hoặc không được hỗ trợ trong các trình duyệt trên các nền tảng đó.
  • Hãy thử nghiệm bằng một hoặc nhiều trình duyệt lấy động lực thúc đẩy quyền riêng tư của người dùng. Bao gồm các phiên bản thử nghiệm và phát hành trước sắp tới của các trình duyệt phổ biến nhất nếu có thể và nếu bạn có thể sử dụng: bản xem trước công nghệ của Safari, Canary của Chrome, Kênh thử nghiệm Beta của Firefox. Các cách này giúp bạn có cơ hội tốt nhất để xác định sự cố và thay đổi API ảnh hưởng đến trang web của bạn trước khi những thay đổi đó ảnh hưởng đến người dùng. Tương tự, hãy lưu ý đến môi trường của người dùng và tham khảo mọi số liệu phân tích mà bạn trình bày. Nếu cơ sở người dùng của bạn có nhiều điện thoại Android cũ, hãy nhớ đưa những điện thoại đó vào chương trình kiểm thử của bạn. Hầu hết mọi người không có phần cứng nhanh và các bản phát hành mới nhất như nhóm phát triển của chúng tôi.
  • Hãy thử nghiệm bằng cách sử dụng cả hồ sơ sạch và chế độ duyệt web riêng tư/ẩn danh; khả năng là bạn đã cấp các quyền cần thiết trong hồ sơ cá nhân của mình. Kiểm tra xem điều gì sẽ xảy ra nếu bạn từ chối cấp quyền truy cập vào trang web cho bất kỳ câu hỏi nào.
  • Hãy kiểm tra rõ ràng các trang của bạn ở chế độ bảo vệ bằng vân tay của Firefox. Thao tác này sẽ hiển thị hộp thoại quyền nếu trang của bạn đang tìm cách tạo vân tay số hoặc sẽ trả về dữ liệu mờ cho một số API. Điều này giúp bạn xác nhận xem các bên thứ ba có trong dịch vụ của bạn có đang sử dụng dữ liệu có thể tạo vân tay số hay không, hay dịch vụ của bạn phụ thuộc vào điều đó. Sau đó, bạn có thể cân nhắc xem kỹ thuật làm mờ có chủ ý có khiến bạn khó thực hiện điều mình cần hơn không. Hãy cân nhắc việc chỉnh sửa sao cho phù hợp để lấy dữ liệu đó từ một nguồn khác, thực hiện mà không cần nguồn dữ liệu đó hoặc sử dụng dữ liệu ít chi tiết hơn.
  • Như đã thảo luận trước đó trong mô-đun bên thứ ba, bạn cũng cần kiểm tra các phần phụ thuộc của bên thứ ba để xem họ có sử dụng kỹ thuật tạo vân tay số hay không. Phương pháp tạo vân tay số thụ động rất khó phát hiện (và không thể phát hiện nếu bên thứ ba thực hiện việc này trên máy chủ của họ), nhưng chế độ tạo vân tay số có thể gắn cờ một số kỹ thuật tạo vân tay và việc sử dụng navigation.userAgent hoặc việc tạo các đối tượng <canvas> ngoài dự kiến cũng có thể tiết lộ một số phương pháp cần xem xét kỹ lưỡng hơn. Bạn cũng nên sử dụng thuật ngữ "khớp xác suất" trong tài liệu tiếp thị hoặc tài liệu kỹ thuật mô tả bên thứ ba; điều này đôi khi có thể cho thấy việc sử dụng các kỹ thuật tạo vân tay số.

Công cụ thử nghiệm trên nhiều trình duyệt

Việc kiểm thử mã cho mục đích bảo vệ quyền riêng tư là rất khó để tự động hoá, cũng như chúng tôi sẽ mô tả những điều cần lưu ý khi kiểm thử theo cách thủ công trong phần trên. Ví dụ: điều gì xảy ra khi bạn từ chối cấp quyền truy cập vào trang web cho bất kỳ API nào mà trang web đó cố gắng truy cập và trang web đó hiển thị với người dùng như thế nào? Quy trình kiểm tra tự động không thể đánh giá liệu trang web có mục đích giúp người dùng tin tưởng trang web hay ngược lại để khuyến khích người dùng không tin tưởng trang web đó hoặc cho rằng có nội dung nào đó đang bị ẩn.

Tuy nhiên, sau khi trang web đã được kiểm tra, việc kiểm thử API để xác nhận rằng không có vấn đề nào trong các phiên bản trình duyệt mới hơn (hoặc trong các phiên bản "beta" và "bản xem trước") sắp tới có thể được tự động hoá và phần lớn sẽ là một phần trong bộ kiểm thử hiện có của bạn. Khi làm việc với các công cụ kiểm thử tự động, khi làm việc với mức độ phù hợp của giao diện API, hầu hết các trình duyệt đều cho phép mức độ kiểm soát nhất định đối với những API và tính năng hiện có. Chrome thực hiện việc này thông qua các nút chuyển dòng lệnh, cũng như Firefox. Khi có quyền truy cập vào các nút này trong quá trình thiết lập công cụ kiểm thử, bạn sẽ có thể chạy một số hoạt động kiểm thử nhất định khi các API ở trạng thái bật hoặc tắt. (Ví dụ: Xem trình bổ trợ chạy trình duyệt của Cypress và tham sốlaunch.args của nhà phát triển để biết các cách thêm cờ trình duyệt khi chạy.)

Chỉ dựa vào chuỗi tác nhân người dùng để cung cấp thông tin thô

Một ví dụ khác là kể từ khi bắt đầu web, các trình duyệt đã gửi nội dung mô tả về chính mình cho mọi yêu cầu trong tiêu đề Tác nhân người dùng HTTP. Gần như lâu nay, mọi người đã kêu gọi các nhà phát triển web không dùng nội dung của tiêu đề tác nhân người dùng để phân phát nội dung khác nhau cho các trình duyệt khác nhau. Trong khoảng thời gian đó, các nhà phát triển web vẫn làm vậy, với một số lý do nhất định trong một số (nhưng không phải tất cả) trường hợp. Vì trình duyệt không muốn các trang web chọn lọc ra trải nghiệm dưới mức tối ưu, nên điều này sẽ dẫn đến việc mọi trình duyệt sẽ giả mạo mọi trình duyệt khác và chuỗi tác nhân người dùng sẽ trông giống như sau:

Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36.

Điều này tuyên bố, cùng với nhiều nội dung khác, là Mozilla/5.0, một trình duyệt được phát hành cùng lúc với thời điểm các phi hành gia đầu tiên bước lên Trạm vũ trụ quốc tế hơn hai thập kỷ trước. Tất nhiên, chuỗi tác nhân người dùng là một nguồn entropy phong phú để tạo vân tay số và để giảm thiểu khả năng tạo vân tay số đó, các nhà sản xuất trình duyệt đã cố định tiêu đề tác nhân người dùng hoặc đang hướng tới việc này. Đây là một ví dụ khác về việc thay đổi dữ liệu mà API cung cấp mà không nhất thiết phải xoá hoàn toàn API. Việc gửi một tiêu đề tác nhân người dùng trống sẽ làm hỏng vô số trang web cho rằng nó có hiện diện. Nhìn chung, những gì trình duyệt đang làm là xoá một số chi tiết khỏi trình duyệt và sau đó giữ lại hầu như không thay đổi. (Bạn có thể thấy quá trình này diễn ra trong Safari, ChromeFirefox.) Về cơ bản, biện pháp bảo vệ khỏi vân tay số chi tiết có nghĩa là bạn không thể dựa vào tiêu đề tác nhân người dùng nữa là chính xác. Nếu muốn làm như vậy, thì bạn cần phải tìm các nguồn dữ liệu thay thế.

Để rõ ràng, dữ liệu trong tác nhân người dùng không biến mất hoàn toàn, nhưng dữ liệu có sẵn ở độ chi tiết thấp hơn hoặc đôi khi không chính xác vì một số cũ hơn nhưng không thay đổi có thể được báo cáo. Ví dụ: Firefox, Safari và Chrome đều giới hạn số phiên bản macOS được báo cáo là 10 (xem phần Cập nhật về việc giảm chuỗi tác nhân người dùng để thảo luận thêm tại đây). Chi tiết chính xác về cách Chrome lên kế hoạch giảm dữ liệu trong chuỗi tác nhân người dùng có tại User-Agent Reduction (Giảm thiểu tác nhân người dùng), nhưng nói tóm lại, bạn có thể dự kiến rằng số phiên bản trình duyệt được báo cáo sẽ chỉ chứa phiên bản lớn (vì vậy số phiên bản sẽ có dạng 123.0.0.0, ngay cả khi trình duyệt là phiên bản 123.10.45.108) và phiên bản hệ điều hành sẽ không thay đổi thành một số chi tiết. Vì vậy, một phiên bản Chrome ảo 123.45.67.89 chạy trên "Windows 20" ảo sẽ báo cáo số phiên bản là:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

Thông tin cốt lõi bạn cần (phiên bản trình duyệt) vẫn có sẵn: đó là Chrome 123, trên Windows. Tuy nhiên, thông tin về công ty con (cấu trúc chip, phiên bản Windows, phiên bản Safari mà trình duyệt đang mô phỏng, phiên bản nhỏ của trình duyệt) sẽ không còn có sẵn sau thời gian treo.

So sánh tác nhân này với một tác nhân người dùng Chrome "hiện tại" trên một nền tảng khác:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36,

và có thể thấy điều duy nhất khác biệt là số phiên bản Chrome (104) và mã nhận dạng nền tảng.

Tương tự, chuỗi tác nhân người dùng của Safari hiển thị một nền tảng và số phiên bản Safari, đồng thời cung cấp một phiên bản hệ điều hành trên iOS, nhưng tất cả những thứ khác đều bị treo. Vì vậy, một phiên bản Safari 1234.5.67 ảo chạy trên macOS 20 ảo có thể cung cấp cho tác nhân người dùng của nó là:

Mozilla/5.0 (Macintosh; **Intel Mac OS X 10_20_0**) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15,

và trên iOS 20 ảo, nó có thể là:

Mozilla/5.0 (iPhone; CPU **iPhone OS 20_0** like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/**20.0 Mobile/15E148 Safari/605.1.15**.

Xin nhắc lại, thông tin cốt lõi (đây là Safari, trên iOS hoặc macOS) đã có sẵn và iOS Safari vẫn cung cấp số phiên bản iOS; nhưng nhiều thông tin phụ trợ trước đây đã bị đóng băng. Quan trọng là dữ liệu này bao gồm cả số phiên bản Safari (không nhất thiết có sẵn).

Những thay đổi đối với tác nhân người dùng được báo cáo đã được tranh luận sôi nổi. https://github.com/WICG/ua-client-hints#use-casestóm tắt tóm tắt một số lập luận và lý do cho sự thay đổi đó, còn Rowan Merewood có bản trình bày với một số chiến lược để không sử dụng tác nhân người dùng để phân biệt, trong bối cảnh được giải thích thêm về đề xuất Gợi ý của ứng dụng UA.

Làm mờ

Kiểm tra mờ (fuzzing) là một thuật ngữ trong hoạt động bảo mật, trong đó API được gọi với giá trị không mong muốn với hy vọng sẽ xử lý các giá trị không mong muốn đó một cách không tốt và gây ra vấn đề bảo mật. Nhà phát triển web nên làm quen với tập lệnh trên nhiều trang web (XSS), trong đó liên quan đến việc thêm tập lệnh độc hại vào một trang, thường là do trang không thoát đúng cách HTML được chèn (vì vậy, bạn thực hiện truy vấn tìm kiếm có văn bản <script> trong đó). Các nhà phát triển phụ trợ sẽ nhận thức được về tính năng chèn SQL, trong đó các truy vấn cơ sở dữ liệu không xác thực chính xác hoạt động đầu vào của người dùng sẽ gây ra các vấn đề bảo mật (đáng chú ý là được minh hoạ bằng xkcd với Little Bobby Tables). Kiểm thử mờ (fuzz test) hay kiểm thử mờ (fuzz test) được sử dụng đúng cách hơn cho các nỗ lực tự động nhằm cung cấp nhiều dữ liệu đầu vào không hợp lệ hoặc ngoài dự kiến cho một API, cũng như để kiểm tra kết quả về các sự cố rò rỉ bảo mật, sự cố hoặc cách xử lý không hợp lệ khác. Đây đều là các ví dụ về hành vi cố ý cung cấp thông tin không chính xác. Tuy nhiên, ở đây, thử nghiệm đang được các trình duyệt thực hiện trước (bằng cách cố ý làm cho tác nhân người dùng không chính xác), nhằm khuyến khích các nhà phát triển ngừng dựa vào dữ liệu đó.

Nên

  • Kiểm tra cơ sở mã của bạn xem có phụ thuộc vào chuỗi tác nhân người dùng hay không (một cụm từ tìm kiếm navigator.userAgent có khả năng tìm thấy nhiều lần xuất hiện nhất trong mã phía máy khách của bạn, và mã phụ trợ của bạn có thể sẽ tìm User-Agent làm tiêu đề), bao gồm cả các phần phụ thuộc của bạn.
  • Nếu bạn tìm thấy các trường hợp sử dụng trong mã của mình, hãy tìm hiểu xem mã đang kiểm tra điều gì và tìm cách khác để phân biệt (hoặc tìm phần phụ thuộc thay thế hoặc làm việc với phần phụ thuộc ngược dòng bằng cách gửi vấn đề hoặc kiểm tra với họ để biết thông tin cập nhật). Đôi khi, cần thiết phải phân biệt trình duyệt để xử lý lỗi, nhưng tác nhân người dùng sẽ ngày càng trở thành không phải là cách để làm điều này khi trình duyệt bị treo.
  • Bạn có thể vẫn an toàn. Nếu bạn chỉ sử dụng các giá trị cốt lõi về thương hiệu, phiên bản lớn và nền tảng, thì các giá trị này gần như vẫn sẽ được cung cấp và chính xác trong chuỗi tác nhân người dùng.
  • MDN mô tả các cách hay để tránh phụ thuộc vào chuỗi tác nhân người dùng ("trình duyệt web sniffing"), trong số đó là phát hiện tính năng.
  • Nếu dựa vào chuỗi tác nhân người dùng theo một cách nào đó (ngay cả khi chỉ sử dụng một vài giá trị cốt lõi vẫn hữu ích), thì bạn nên thử nghiệm với các tác nhân người dùng sắp có trong bản phát hành trình duyệt mới. Bạn có thể tự kiểm thử với các phiên bản trình duyệt sắp ra mắt đó bằng bản dựng xem trước công nghệ hoặc bản beta, nhưng bạn cũng có thể đặt chuỗi tác nhân người dùng tuỳ chỉnh để kiểm thử. Khi phát triển cục bộ, bạn có thể ghi đè chuỗi tác nhân người dùng trong Chrome, Edge, FirefoxSafari để kiểm tra cách mã của bạn xử lý các giá trị tác nhân người dùng khác nhau mà bạn có thể nhận được từ người dùng.

Gợi ý của ứng dụng

Một đề xuất chính giúp cung cấp thông tin này là Gợi ý ứng dụng tác nhân người dùng, mặc dù thông tin này không được hỗ trợ trên một số trình duyệt. Các trình duyệt hỗ trợ sẽ chuyển 3 tiêu đề: Sec-CH-UA (cho biết thương hiệu và số phiên bản của trình duyệt); Sec-CH-UA-Mobile (cho biết liệu yêu cầu có đến từ thiết bị di động hay không) và Sec-CH-UA-Platform (cho biết tên của hệ điều hành). (Việc phân tích cú pháp các tiêu đề này khó hơn có vẻ như vì chúng là Tiêu đề có cấu trúc chứ không phải là các chuỗi đơn giản. Điều này được thực thi bởi các trình duyệt gửi giá trị "lừa đảo". Giá trị này sẽ được xử lý không chính xác nếu không được phân tích cú pháp đúng cách. Như trước đó, đây là một ví dụ về "kiểm thử mờ" được trình duyệt thực hiện trước. Nhà phát triển cần sử dụng dữ liệu này để xử lý đúng cách vì dữ liệu được thiết kế để việc phân tích cú pháp không chính xác hoặc từng phần có thể dẫn đến kết quả không tốt, chẳng hạn như hiển thị các thương hiệu không tồn tại hoặc chuỗi không đóng đúng cách.) May mắn là dữ liệu này cũng được trình duyệt cung cấp trực tiếp cho JavaScript dưới dạng navigator.userAgentData. Trong trình duyệt hỗ trợ, dữ liệu này có thể trông giống như đối tượng sau:

{
  "brands": [
    {
    "brand": " Not A;Brand",
    "version": "99"
    },
    {
    "brand": "Chromium",
    "version": "96"
    },
    {
    "brand": "Google Chrome",
    "version": "96"
    }
  ],
  "mobile": false
}