Tạo vân tay số nghĩa là cố gắng nhận dạng người dùng khi họ quay lại trang web của bạn hoặc nhận dạng 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ụ: có thể bạn đang dùng một loại thiết bị khác và một 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. Nếu tôi có phông chữ "Dejavu Sans" nếu 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 công trình tạo vân tay số; bạn tạo một tập hợp các điểm dữ liệu này và mỗi điểm cung cấp thêm cách để phân biệt giữa những người dùng.
Một định nghĩa chính thức hơn có thể giống như sau: Tạo vân tay số là hành động sử dụng các giá trị lâu dài một cách rõ ràng và không rõ ràng đặc điểm do người dùng thiết lập để 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ố 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 quan trọng, chẳng hạn như việc tạo vân tay số cho người dùng, chẳng hạn như phát hiện gian lận. Tuy nhiên, 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 và hoạt động theo dõi đó thường được thực hiện mà không có sự đồng ý của người dùng, hoặc trong một số trường hợp, dựa trên về sự đồng ý không hợp lệ mà không thông báo đầy đủ cho người dùng. Khi hoàn tất, những người dùng đó thường sẽ thấy phần nào cảm thấy lo lắng và cảm thấy mình bị phản bội.
Tạo vân tay số nghĩa là tìm cách bí mật phân biệt một người dùng với người dùng khác. Phương pháp tạo vân tay số có thể dùng để nhận dạng rằng vẫn là chính người dùng đó trên cùng một trang web hoặc nhận dạng cùng một người dùng trên hai hồ sơ trình duyệt khác nhau cùng một lúc. Điều này có nghĩa là tạo vân tay số có thể được dùng để theo dõi người dùng trên các trang web. Phương pháp theo dõi dựa trên thuật toán tất định và công khai, chẳng hạn như lưu trữ cookie với mã nhận dạng người dùng cụ thể duy nhất, ở một mức độ nào đó người dùng có thể quan sát và kiểm soát (và học phần 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 khỏi việc tạo vân tay số vì nó được che giấu; phương pháp đó phụ thuộc vào các đặc điểm không thay đổi và rất có thể xảy ra vô hình. Đây là lý do nơi đây có tên "tạo vân tay số". Tốt nhất là khó thay đổi vân tay, dù là vân tay số hay vân tay ở đầu cuối trên các 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ế việc tạo vân tay số (một số điều mà chúng ta đã thấy trong học phần trước). Tại đây, chúng tôi đang xem xét mức độ ảnh hưởng của các tính năng này đến doanh nghiệp của bạn và cách mà vẫn có thể làm những gì bạn muốn làm sao cho bảo vệ quyền riêng tư. Phần này giới thiệu thêm về cách thức bảo vệ của trình duyệt dựa trên việc tạo vân tay số sẽ ảnh hưởng đến việc bạn làm và cách thức tạo vân tay, chứ không phải là cách thức bạn tạo vân tay số sẽ ngăn bạn tạo vân tay.
Trên thực tế, hầu hết các nhà phát triển và hầu hết doanh nghiệp đều không cần tạo vân tay số của 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ì người dùng của bạn sẽ xác định danh tính của chính bạn với bạn, với sự đồng ý của họ và theo cách mà họ có thể đơn phương chọn không tham gia bất kỳ lúc nào họ chọn. Đây là một phương thức bảo vệ quyền riêng tư để tìm hiểu xem 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 bảo vệ tốt hơn quyền riêng tư (và sau đó bạn sẽ thu thập chỉ dữ liệu bạn cần).
Nên
Đánh giá các bên thứ ba để tạo vân tay số. Trong mô-đun bên thứ ba, bạn có thể đã có danh sách mọi dịch vụ của bên thứ ba mà bạn đang bao gồm và các yêu cầu web mà họ thực hiện. Có thể để kiểm tra các yêu cầu đó để xem dữ liệu nào đang được chuyển lại cho trình khởi tạo, 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 số là một quy trình bí mật liên quan đến việc yêu cầu dữ liệu không cần người dùng phê duyệt.
Bạn cũng nên đọc các chính sách quyền riêng tư của dịch vụ bên thứ ba và các phần phụ thuộc để tìm các dấu hiệu của tạo vân tay số đang sử dụng. Phương pháp này đôi khi đượ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 theo xác suất, thay vì "khớp xác định".
Cách tạo vân tay số
Thông thường, sự kết hợp cá nhân của tất cả những đặc điểm này là duy nhất đối với bạn hoặc tại ít nhất cho một nhóm nhỏ những người tương tự; thông tin 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 số thụ động và kỹ thuật tạo vân tay số chủ động. 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à đặt câu hỏi rõ ràng cho trình duyệt để lấy thêm thông tin. Lý do khiến sự khác biệt này quan trọng 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. Các API có thể bị hạn chế hoặc được đưa vào cổng sau một hộp thoại yêu cầu sự cho phép của người dùng (và vì thế sẽ cảnh báo người dùng rằng họ đang được sử dụng hoặc cho phép người dùng từ chối họ theo mặc định). Kỹ thuật thụ động là kỹ thuật sử dụng dữ liệu đã được cung cấp cho trang web, thường là do trong quá khứ, trong những ngày đầu của đường 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à chúng ta sẽ xem xét chi tiết hơn về vấn đề này. Công cụ này được đánh giá 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 hiển thị các thông tin khác nhau dựa trên điều đó. Tuy nhiên, điều này cũng làm tăng số lượng thông tin khác biệt được cung cấp, thông tin giúp nhận dạng một người dùng với một người dùng khác; và vì vậy, thông tin đó ngày càng không còn tồn tại, hoặc ít nhất là bị đóng băng để không còn phân biệt nữa. Nếu những gì bạn làm dựa vào thông tin này—ví dụ: nếu bạn đang sử dụng các nhánh mã phụ 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 đó. Thử nghiệm là cách bảo vệ tốt nhất ở đây ( xem sau).
Ngoài ra: đo lường khả năng tạo vân tay số
Biện pháp kỹ thuật về lượng thông tin mà mỗi điểm dữ liệu này 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ị khác nhau (chẳng hạn như danh sách phông chữ đã cài đặt) có thể đóng góp rất nhiều thành tổng số, theo đó một thứ không có nhiều sức mạnh khác biệt (chẳng hạn như hệ điều hành bạn đang sử dụng) chỉ có thể thêm một vài thông báo. Niên giám HTTP mô tả cách tạo vân tay số hiện có thư viện tự động hoá quá trình kết hợp phản hồi này từ nhiều API khác nhau thành một "hàm băm", lệnh này chỉ có thể xác định một một nhóm nhỏ người dùng, thậm chí có thể chỉ là một. Maud Nalpas trình bày chi tiết về điều này trong video trên YouTube này. Nhưng tóm lại, hãy tưởng tượng rằng bạn sẽ xem danh sách bạn bè của bạn với những bản nhạc, món ăn ưa thích và ngôn ngữ họ nói ... nhưng kèm theo tên của họ đã bị xóa. Rất có khả năng bất kỳ danh sách nào của một người sẽ xác định được duy nhất họ trong số bạn bè của bạn, hoặc ít nhất là thu hẹp đưa danh sách xuống chỉ còn một vài người. Đây là cách tạo vân tay số hoạt động; danh sách những thứ bạn thích sẽ trở thành "băm". Bằng 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ông được kết nối khác nhau trở nên dễ dàng hơn, đây là mục tiêu của theo dõi: để tránh né mong muốn của người dùng về quyền riêng tư.
Các trình duyệt làm gì chống lại tạo vân tay số?
Điều quan trọng là nhà cung cấp trình duyệt rất biết nhiều cách khác nhau cho một trang web (hoặc bên thứ ba được đưa vào trang web) để tính toán một vân tay khác biệt cho người dùng hoặc cho các bit thông tin khác nhau góp phần tạo nên tính độc đáo của vân tay đó. Một số cách trong số này là 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 sử dụng (và điều đó 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 tạo ra cố ý để có thể tạo vân tay số, nhưng cuối cùng lại có thể tạo vân tay số chẳng hạn như danh sách phông chữ hoặ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, bạn chỉ cần nhận danh sách theo tên.) Một số ứng dụng được thiết lập để đóng góp cho vân tay số sau khi phát hành, chẳng hạn như kết xuất chính xác pixel để khử răng cưa của phông chữ trên phần tử canvas. Còn nhiều cách khác nữa, 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 đều thêm entropy, do đó có khả năng đóng góp vào để phân biệt giữa bạn và tôi, đồng thời nhận dạng một cá nhân cụ thể 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 chưa đầy đủ) về những cách đóng góp vân tay tiềm năng danh sách này và danh sách luôn tăng lên (vì có nhiều mối quan tâm về tiền bạc trong việc có thể dựa vào vân tay số của người dùng, ngay cả khi người dùng không muốn hoặc có lẽ không mong đợi điều đó).
Không hỗ trợ một số API mạnh mẽ nhất định
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 bớt lượng entropy có sẵn từ các API này. Cách hạn chế nhất là không triển khai các tính năng này ngay từ đầu. Điều này đã được một số trình duyệt chính thực hiện cho nhiều API phần cứng và thiết bị (như truy cập NFC và Bluetooth từ ứng dụng web phía máy khách), cùng với những lo ngại về tạo vân tay số và quyền riêng tư là lý do khiến các công cụ này không được triển khai. Đây, rõ ràng là có thể ảnh hưởng đến các ứng dụng và dịch vụ của bạn: bạn hoàn toàn không thể sử dụng API trong một 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.
Cổng thông tin về quyền của người dùng
Cách thứ hai mà các nhà cung cấp trình duyệt thực hiện là ngăn chặn các lượt 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 thực hiện vì lý do bảo mật—một trang web không thể chụp ảnh bằng webcam của bạn mà không có sự cho phép của bạn! Tuy nhiên, trong trường hợp này, quyền riêng tư và bảo mật cũng có thể có những mối quan tâm tương tự. Việc xác định vị trí của ai đó là vi phạm quyền riêng tư và bản thân nó cũng góp phần tạo nên tính độc đáo của vân tay. Yêu cầu cấp quyền để xem vị trí địa lý không làm giảm entropy bổ sung mà một vị trí thêm vào tính độc đáo của vân tay số đó, nhưng về cơ bản loại bỏ việc sử dụng vị trí địa lý để tạo vân tay số vì hệ thống sẽ không còn thực hiện thao tác này một cách vô hình nữa. Toàn bộ điểm của tạo vân tay số là hành vi bí mật phân biệt người dùng với nhau. Nếu bạn sẵn sàng để người dùng biết rằng bạn đang cố gắng nhận dạng người đó thì bạn không cần kỹ thuật tạo vân tay số: hãy yêu cầu người dùng tạo một tài khoản rồi đăng nhập với nó.
Thêm giá trị khó dự đoán
Phương pháp thứ ba được thực hiện trong một số trường hợp là để nhà cung cấp trình duyệt "làm mờ" phản hồi từ API để làm cho chúng ít chi tiết hơn
và do đó khó nhận dạng hơn. Điều 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 như là
mà bạn có thể thực hiện khi thu thập dữ liệu từ người dùng để tránh vô tình thu thập dữ liệu có thể nhận dạng. 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ả ứng dụng web cũng như 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 những giá trị này
chính xác đến mili giây, nhưng giá trị trả về được chủ ý giảm độ chính xác bằng cách làm tròn đến 20 micro giây gần nhất
để tránh sử dụng chúng trong việc tạo vân tay số (đồng thời cũng để bảo mật nhằm tránh các cuộc tấn công 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 câu trả lời ít nhận dạng hơn: về bản chất, là cung cấp "miễn dịch cộng đồng" bằng cách tạo
thiết bị của bạn trông giống thiết bị của người khác hơn là khác biệt đối với bạn. Safari giới thiệu phiên bản cấu hình hệ thống được đơn giản hóa
chính vì lý do này.
Thực thi ngân sách về quyền riêng tư
Ngân sách quyền riêng tư là một đề xuất cho thấy các trình duyệt sẽ ước tính thông tin do mỗi nền tảng tạo vân tay số cung cấp. 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 đảm bảo 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 thử nghiệm trên diện 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ác câu trả lời và phương pháp đưa ra rất đa dạng 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 khác nhau là quan trọng. Tất nhiên điều này luôn quan trọng, nhưng có thể hợp lý nếu giả định rằng hiển thị HTML hoặc CSS sẽ không đổi cho công cụ kết xuất cụ thể, bất kể công cụ đó nằm trong trình duyệt hoặc nền tảng nào (và vì vậy có thể hấp dẫn chỉ thử nghiệm trong một Ví dụ: trình duyệt dựa trên thao tác nhấp nháy). Điều này rõ ràng không áp dụng cho việc sử dụng API vì các trình duyệt có chung công cụ kết xuất khác nhau đáng kể về cách họ làm cứng bề mặt API dựa trên vân tay số.
Nên
- Kiểm tra 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 mà bạn nên ưu tiên khi thử nghiệm.
- Một nhóm 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 kiểm thử trên ba công cụ kết xuất chính (Gecko trong Firefox, các nhánh khác nhau của Blink trong Chrome, Edge và Samsung Internet cũng như Webkit trong Safari) và 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 kiểm tra trên các thiết bị đó. Một số nền tảng phần cứng có thể bị chậm trễ so với thiết bị di động và máy tính để bàn khi có bản cập nhật trình duyệt, tức là một số API có thể chưa được triển khai hoặc không khả dụng trong các trình duyệt trên các nền tảng đó.
- Thử nghiệm với một hoặc nhiều trình duyệt có yêu cầu quyền riêng tư của người dùng. Bao gồm cả phiên bản thử nghiệm và bản phát hành trước sắp tới trong số các trình duyệt phổ biến nhất mà bạn có thể và nếu trình duyệt đó khả 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. Những thay đổi này giúp bạn có nhiều khả năng nhất để xác định lỗi API và những thay đổi ảnh hưởng đến trang web của bạn trước khi những thay đổi đó ảnh hưởng người dùng của bạn. Tương tự, hãy thu thập ý kiến đóng góp của người dùng tham chiếu đến bất kỳ số liệu phân tích nào bạn có. Nếu cơ sở người dùng có số lượng lớn điện thoại Android cũ, hãy nhớ đưa những điện thoại đó vào thử nghiệm 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 của nhóm phát triển.
- Thử nghiệm bằng cả hồ sơ rõ ràng và ở chế độ duyệt web ẩn danh/riêng tư; khả năng bạn đã cấp quyền các quyền cần thiết trong hồ sơ cá nhân của bạn. Kiểm tra xem điều gì sẽ xảy ra nếu bạn từ chối cấp quyền cho trang web đối với bất kỳ câu hỏi nào.
- Kiểm tra rõ ràng các trang của bạn bằng tính năng bảo vệ bằng vân tay của Firefox . Thao tác này sẽ hiển thị hộp thoại cấp 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 trong dịch vụ của bạn đang sử dụng dữ liệu có thể tạo vân tay số hay dịch vụ của riêng bạn phụ thuộc về phần đó. Sau đó, bạn có thể cân nhắc xem việc làm mờ có chủ ý có khiến việc đó trở nên khó khăn hơn không. Cân nhắc việc tạo sửa đổi cho phù hợp để lấy dữ liệu đó từ một nguồn khác, không sử dụng 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, điều quan trọng là bạn phải kiểm tra bên thứ ba
để xem chúng có đang 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ể nếu bên thứ ba thực hiện việc đó 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 số,
và tìm cách sử dụng navigator.userAgent hoặc tạo đối tượng
<canvas>
ngoài dự kiến cũng có thể cho thấy một số phương pháp cần xem xét kỹ hơn. Bạn cũng nên tìm cách sử dụng thuật ngữ "so khớp xác suất" trong 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 kỹ thuật tạo vân tay số.
Công cụ kiểm tra trên nhiều trình duyệt
Việc kiểm thử mã nhằm mục đích bảo vệ quyền riêng tư là rất khó để tự động hoá. Ngoài ra, chúng tôi sẽ mô tả về những điều cần lưu ý khi kiểm thử theo cách thủ công ở phần trên. Chẳng hạn, điều gì xảy ra khi bạn từ chối cấp quyền cho trang web đối với bất kỳ API nào mà trang web muốn truy cập và việc đó được trình bày cho người dùng như thế nào? Kiểm thử tự động không thể đánh giá liệu trang web có hành động giúp người dùng tin tưởng hay ngược lại khuyến khích người dùng không tin tưởng nó, hoặc nghĩ rằng có điều gì đó đang bị che khuất.
Tuy nhiên, sau khi trang web được kiểm tra, việc kiểm tra API để xác nhận rằng không có vấn đề gì trong các phiên bản trình duyệt mới (hoặc trong các phiên bản "beta" sắp tới và "bản xem trước" phiên bản) có thể được tự động hoá và phần lớn sẽ có trong bộ kiểm thử hiện tại của bạn. Nội dung nào đó cần xem xét với các công cụ kiểm tra tự động, khi làm việc với phạm vi nền tảng của API, hầu hết các trình duyệt đều cho phép kiểm soát API và tính năng nào có sẵn. Chrome thực hiện việc này thông qua công tắc dòng lệnh, tương tự như với Firefox và có quyền truy cập vào các trình duyệt này trong công cụ kiểm tra sẽ cho phép bạn chạy một số thử nghiệm nhất định khi API bật hoặc tắt. (Ví dụ: xem trình bổ trợ khởi chạy trình duyệt và thông số launch.args của puppeteer để biết các cách để thêm cờ của trình duyệt khi chạy.)
Chỉ dựa vào chuỗi tác nhân người dùng để tìm thông tin thô
Lấy một ví dụ khác, kể từ khi hình thành web, các trình duyệt đã gửi một đoạn mô tả về chính trình duyệt đó với mỗi yêu cầu trong Tiêu đề Tác nhân người dùng HTTP. Trong khoảng thời gian dài, mọi người đã luôn khuyến khích các nhà phát triển web không sử dụng nội dung trong 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 và từ trước đến nay các nhà phát triển web vẫn làm như vậy, với một lượng lý do 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 bị các trang web chọn sẽ mang lại trải nghiệm dưới mức tối ưu, dẫn đến việc mọi trình duyệt giống như mọi trình duyệt khác và chuỗi tác nhân người dùng sẽ có dạ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 những thứ khác, là Mozilla/5.0, một trình duyệt được phát hành cùng thời điểm với các phi hành gia đầu tiên đã lên Trạm không gian quốc tế hơn hai thập kỷ trước. Chuỗi tác nhân người dùng là một nguồn entropy phong phú để tạo vân tay số, tất nhiên 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 làm việc hướng tới việc đó. Đây là một ví dụ khác về cách 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 tiêu đề trống cho tác nhân người dùng sẽ phá vỡ vô số trang web cho rằng có tác nhân người dùng đó. Nhìn chung, những gì trình duyệt đang làm là xoá một số chi tiết khỏi đối tượng rồi giữ nguyên không thay đổi từ đó. (Bạn có thể thấy điều này xảy ra trong Safari, Chrome, và Firefox.) Biện pháp bảo vệ này chống lại về cơ bản, tạo vân tay số chi tiết nghĩa là bạn không thể dựa vào tiêu đề tác nhân người dùng có chính xác nữa không và nếu bạn khi đó, bạn cần phải tìm các nguồn dữ liệu thay thế.
Để làm rõ, dữ liệu trong tác nhân người dùng không biến mất hoàn toàn, mà có sẵn ở mức độ chi tiết thấp hơn, hoặc đôi khi không chính xác vì một số cũ nhưng không thay đổi có thể được báo cáo. Ví dụ: Firefox, Safari và Chrome đều viết hoa số phiên bản macOS được báo cáo thành 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). Bạn có thể xem thông tin chi tiết chính xác về cách Chrome dự định giảm bớt dữ liệu trong chuỗi tác nhân người dùng trong bài viết Giảm thiểu tác nhân người dùng nhưng tóm lại, bạn có thể thấy rằng số phiên bản của trình duyệt được báo cáo sẽ chỉ chứa một phiên bản lớn (vì vậy, số phiên bản sẽ trông giống như 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 có thông tin chi tiết và sẽ cố định với một trong số ít lựa chọn không thay đổi. Vì vậy, một phiên bản Chrome ảo 123.45.67.89 chạy trên một thiết bị tưởng tượng "Windows 20" 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 mà 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, công ty con thông tin (cấu trúc chip, phiên bản Windows, phiên bản Safari bắt chước, phiên bản nhỏ của trình duyệt) sẽ không dùng được nữa sau khi hết thời gian tạm ngưng.
So sánh điều này với một "hiện tại" Tác nhân người dùng Chrome 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 rằng điểm khác biệt duy nhấ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ị nền tảng và số phiên bản Safari, đồng thời cũng cho biết phiên bản hệ điều hành trên iOS, nhưng mọi thứ khác đều bị treo. Vì vậy, một phiên bản Safari tưởng tượng 1234.5.67 chạy trên macOS 20 tưởng tượng có thể cung cấp cho tác nhân người dùng của nó như:
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 một hệ điều hành iOS 20 tưởng tượng, trạng thái đó 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**
.
Một lần nữa, thông tin cốt lõi (đây là Safari, có trên iOS hoặc macOS) và iOS Safari vẫn cung cấp số phiên bản iOS; nhưng phần lớn thông tin phụ trợ có sẵn trong quá khứ đã bị đóng băng. Quan trọng là trình duyệt này bao gồm cả Safari số phiên bản. Số này không nhất thiết phải có sẵn.
Những thay đổi đối với tác nhân người dùng được báo cáo đã gây tranh cãi sôi nổi. https://github.com/WICG/ua-client-hints#use-cases tóm tắt nội dung tóm tắt một số lập luận và lý do cho thay đổi này, và Rowan Merewood có một bản trình bày với một số chiến lược di chuyển khỏi việc sử dụng tác nhân người dùng để phân biệt, trong ngữ cảnh đề xuất Gợi ý ứng dụng UA được giải thích thêm.
Làm mờ
Kỹ thuật mờ là một thuật ngữ trong phương pháp bảo mật, trong đó API được gọi với các giá trị không mong muốn với hy vọng chúng xử lý được những giá trị đó
các giá trị không mong muốn và tiềm ẩn 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),
bao gồm cả 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 một truy vấn tìm kiếm
với văn bản <script>
trong đó). Các nhà phát triển phụ trợ sẽ nhận biết được tính năng chèn SQL,
nơi các truy vấn cơ sở dữ liệu không xác thực hoạt động đầu vào của người dùng sẽ làm lộ các vấn đề bảo mật (như được minh hoạ đáng chú ý bằng xkcd với
Little Bobby Tables). Kiểm thử mờ (fuzz test) hoặc kiểm thử mờ (fuzz test) sẽ đúng hơn
dùng cho các nỗ lực tự động nhằm cung cấp nhiều thông tin đầu vào không hợp lệ hoặc không mong muốn cho một API và để kiểm tra kết quả xem có rò rỉ bảo mật hay không,
sự cố hoặc xử lý kém khác. Đây đều là các ví dụ về trường hợp cố ý cung cấp thông tin không chính xác. Tuy nhiên, tại đây, mọi việc đang được thực hiện
để trình duyệt giành quyền trước (bằng cách cố tình cố tình không chính xác để cố tình làm cho tác nhân người dùng không chính xác) để khuyến khích 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ó sự phụ thuộc vào chuỗi tác nhân người dùng hay không (nội dung tìm kiếm cho
navigator.userAgent
có khả năng xuất hiện nhiều nhất trong mã phía máy khách và mã phụ trợ của bạn có thể sẽ tìmUser-Agent
làm tiêu đề), bao gồm phần phụ thuộc. - Nếu bạn tìm thấy cách sử dụng trong mã của riêng mình, hãy tìm hiểu xem mã đang kiểm tra điều gì và tìm một cách khác để phân biệt điều đó (hoặc tìm phần phụ thuộc thay thế hoặc xử lý phần phụ thuộc đó ở phiên bản ngược dòng bằng cách báo cáo vấn đề hoặc kiểm tra với họ để biết thông tin cập nhật). Thỉnh thoảng trình duyệt là cần thiết để khắc phục lỗi, nhưng tác nhân người dùng sẽ không còn là cách để thực hiện điều này khi nó bị đóng băng.
- Có thể bạn vẫn an toàn. Nếu bạn chỉ sử dụng các giá trị cốt lõi của thương hiệu, phiên bản lớn và nền tảng, thì những yếu tố này gần như chắc chắn vẫn sẽ là sẵn có 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 ("browser sniffing"), nhưng yếu tố chính trong số đó là phát hiện tính năng.
- Nếu bạn phụ thuộc vào chuỗi tác nhân người dùng theo một cách nào đó (ngay cả khi bạn sử dụng một vài giá trị cốt lõi hữu ích), thì ý tưởng để thử nghiệm với các tác nhân người dùng sắp tới sẽ có trong bản phát hành trình duyệt mới. Bạn có thể thử nghiệm với các 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 cho kiểm thử. Bạn có thể ghi đè chuỗi tác nhân người dùng trong Chrome, Edge, Firefox và Safari, khi thực hiện phát triển cục bộ, để kiểm tra xem mã của bạn xử lý như thế nào với 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 ý về khách hàng
Một đề xuất chính để cung cấp thông tin này là Gợi ý về ứng dụng tác nhân người dùng,
mặc dù cách này không được hỗ trợ trên tất cả các trình duyệt. Các trình duyệt hỗ trợ sẽ chuyển 3 tiêu đề: Sec-CH-UA
, tiêu đề này cung cấp
thương hiệu trình duyệt và số phiên bản; Sec-CH-UA-Mobile
cho biết liệu yêu cầu có đến từ một thiết bị di động hay không; và Sec-CH-UA-Platform
,
tên hệ điều hành. (Việc phân tích cú pháp các tiêu đề này không dễ dàng như bạn nghĩ vì chúng
Tiêu đề có cấu trúc thay vì các chuỗi đơn giản,
và điều này được thực thi bằng cách các trình duyệt gửi "lừa đảo" và các giá trị này sẽ bị xử lý không chính xác nếu không được phân tích cú pháp đúng. Đây là,
như trước đó là ví dụ về việc "kiểm thử mờ" được trình duyệt thực hiện trước. Nhà phát triển sử dụng dữ liệu này bắt buộc phải xử lý
nó đúng cách vì dữ liệu được thiết kế sao cho việc phân tích cú pháp không đúng cách hoặc từng phần có thể mang lại kết quả không tốt, chẳng hạn như hiển thị các thương hiệu không sử dụng
hoặc các chuỗi không đóng đúng cách). Rất may là trình duyệt cũng cung cấp dữ liệu này cho JavaScript trực tiếp dưới dạng
navigator.userAgentData
mà trong trình duyệt hỗ trợ có thể có dạng như đối tượng sau:
{
"brands": [
{
"brand": " Not A;Brand",
"version": "99"
},
{
"brand": "Chromium",
"version": "96"
},
{
"brand": "Google Chrome",
"version": "96"
}
],
"mobile": false
}