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. Có 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 sử dụng một loại thiết bị 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. Nếu tôi đã cài đặt phông chữ "Dejavu Sans" và bạn chưa cài đặt, thì mọi trang web đều có thể phân biệt sự khác 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.
Định nghĩa chính thức hơn có thể như sau: Việc tạo vân tay số là hành động sử dụng các đặc điểm rõ ràng và không rõ ràng tồn tại lâu dài của chế độ thiết lập của người dùng để cố gắng phân biệt họ với nhiều người dùng khác nhất có thể.
Lý do việc tạo vân tay kỹ thuật 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 ngại và cảm thấy mình bị phản bội.
In vân tay kỹ thuật số là tìm cách phân biệt người dùng này với người dùng khác một cách bí mật. 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ố". Rất khó để thay đổi vân tay, cho dù đó là vân tay kỹ thuật số hay vân tay ở đầ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ế 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). Trong bài viết này, chúng ta sẽ xem xét tác động của các tính năng này đối với yêu cầu của bạn về việc kinh doanh và cách vẫn thực hiện những việc bạn muốn theo cách bảo vệ quyền riêng tư. Bài viết này chủ yếu nói về cách tính năng bảo vệ trình duyệt chống lại hoạt động tạo vân tay số sẽ ảnh hưởng đến những việc bạn làm và cách thức thực hiện, thay vì cách tính năng này ngăn bạn tạo vân tay số.
Trong thực tế, hầu hết nhà phát triển và hầu hết doanh nghiệp không cần phải 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ì 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 giúp bảo vệ quyền riêng tư của người dùng hơn nữa (và sau đó, bạn chỉ thu thập dữ liệu mà 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. Bạ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 bên gửi (nếu có). Tuy nhiên, việc này thường rất khó; bản chất của hoạt động tạo vân tay số là một quá 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 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 dấu hiệu về việc sử dụng tính năng vân tay số. 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 hoạt động của tính năng 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. Cookie đượ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, để trang web có thể chọn hiển thị nhiều nội dung dựa trên đó. Tuy nhiên, điều này cũng làm tăng lượng thông tin phân biệt được cung cấp, thông tin giúp phân biệt 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 được cung cấp hoặc ít nhất là bị đóng băng để không còn phân biệt được 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 dấu vân tay
Chỉ số kỹ thuật cho biết 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. HTTP Almanac mô tả cách các thư viện vân tay số hiện có tự động hoá quy trình kết hợp các phản hồi từ nhiều API khác nhau thành một "hàm băm". Hàm này có thể chỉ xác định một nhóm nhỏ người dùng, thậm chí có thể chỉ xác định một người dùng. Maud Nalpas đã đề cập chi tiết về vấn đề này trong video trên YouTube này. Tóm lại, hãy tưởng tượng bạn thấy một danh sách bạn bè cùng với nhạc, món ăn và ngôn ngữ mà họ yêu thích, nhưng tên của họ đã bị xoá. 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 hoạt động của tính năng vân tay số; danh sách những nội dung bạn thích sẽ trở thành "hàm 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 một cách có chủ ý để có thể tạo vân tay kỹ thuật số nhưng cuối cùng vẫn có thể tạo được, 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, bạn chỉ cần nhận danh sách theo tên.) Và một số đã được thiết lập để đóng góp vào vân tay sau khi phát hành, chẳng hạn như hiệu ứng kết xuất pixel chính xác của tính năng khử răng 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
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 vân tay người dùng này là tìm cách giảm 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. Một số trình duyệt lớn đã thực hiện việc này cho nhiều API thiết bị và phần cứng (chẳng hạn như quyền truy cập NFC và Bluetooth từ các ứng dụng web phía máy khách), với các vấn đề về vân tay số và quyền riêng tư được nêu là lý do khiến các API này chưa đượ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 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ó thể có những mối quan tâm tương tự nhau. Dĩ nhiên, việc xác định vị trí của một người là một hành vi vi phạm quyền riêng tư, nhưng cũng là một yếu tố góp phần tạo nên tính duy nhất của vân tay. Việc yêu cầu quyền xem thông tin vị trí địa lý không làm giảm độ hỗn loạn bổ sung mà một vị trí thêm vào tính duy nhất 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 thông tin vị trí địa lý để tạo vân tay số vì việc này không còn được thực hiện một cách ẩn giấu 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 chuẩn bị để 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 sử dụng kỹ thuật vân tay số: hãy yêu cầu người dùng tạo một tài khoản và đăng nhập bằng tài khoả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, là một việc bạn có thể làm khi thu thập dữ liệu từ người dùng để tránh vô tình thu thập dữ liệu 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 đề xuất rằng trình duyệt ước tính thông tin được tiết lộ bởi mỗi nền tảng 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 đả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ó nhiều phản hồi và phương pháp khác nhau 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 bạn có thể giả định rằng việc kết xuất 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ụ đó nằm trong trình duyệt hay nền tảng nào (ví dụ: bạn có thể chỉ kiểm thử trong một trình duyệt dựa trên Blink). Điều này hoàn toàn không đúng với trường hợp sử dụng API vì các trình duyệt dùng chung một công cụ kết xuất có thể khác nhau đáng kể về cách tăng cường nền tảng API của chúng để chống lại việc tạo vân tay số.
Nên
- Hãy kiểm tra số liệu phân tích và đối tượng của riêng bạn để xác định những 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 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, cũng như Webkit trong Safari) và trên cả nền tảng 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 lưu ý đến môi trường của người dùng khi tham khảo bất kỳ số liệu phân tích nào mà 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 như nhóm phát triển.
- Hãy kiểm thử bằng cả hồ sơ sạch và ở chế độ duyệt web ẩn danh/riêng tư; có thể bạn đã cấp các quyền cần thiết trong hồ sơ cá nhân của mình. Kiểm thử 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 thử rõ ràng các trang của bạn ở chế độ bảo vệ chố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 cố gắng 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 hoặc liệu dịch vụ của riêng bạn có phụ thuộc vào dữ liệu đó hay không. 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. Hãy cân nhắc việc chỉnh sửa 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, bạn cũng cần kiểm tra các phần phụ thuộc bên thứ ba để xem liệu các phần phụ thuộc đó có đang sử dụng kỹ thuật lấy vân tay số hay không. Rất khó để phát hiện hoạt động tạo vân tay số thụ động (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 số, đồng thời việc tìm kiếm hoạt động 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 đáng được xem xét kỹ lưỡng hơn. Bạn cũng nên tìm những trường hợp sử dụng thuật ngữ "so khớp dựa trên xác suất" trong tài liệu tiếp thị hoặc kỹ thuật mô tả một bên thứ ba; đôi khi, điều này có thể cho thấy việc sử dụng kỹ thuật 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. Ví dụ: điều gì sẽ xảy ra khi bạn từ chối cấp quyền cho trang web đối với mọi API mà trang web đó cố gắng truy cập và thông tin đó đượ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, 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 thử 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ác nút chuyển dòng lệnh, cũng như Firefox. Việc có quyền truy cập vào các nút chuyển này trong quá trình thiết lập công cụ kiểm thử sẽ cho phép bạn chạy một số kiểm thử nhất định khi bật hoặc tắt API. (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 web ra đời, các trình duyệt đã gửi nội dung mô tả về chính mình cùng với mọi yêu cầu trong tiêu đề Tác nhân người dùng HTTP. Trong gần như suốt thời gian đó, mọi người đã khuyến cáo các nhà phát triển web không sử dụng nội dung của tiêu đề user-agent để phân phát nội dung khác nhau cho các trình duyệt khác nhau. Tuy nhiên, trong suốt thời gian đó, các nhà phát triển web vẫn làm như 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ì các trình duyệt không muốn bị trang web chọn riêng để cung cấp trải nghiệm không tối ưu, nên mọi trình duyệt đều giả vờ là mọi trình duyệt khác và chuỗi user-agent 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
.
Ngoài ra, thông báo này còn tuyên bố là Mozilla/5.0, một trình duyệt được phát hành cùng thời điểm các phi hành gia đầu tiên lên Trạm vũ trụ quốc tế cách đây hơn hai thập kỷ. Tất nhiên, chuỗi user-agent là một nguồn entropy phong phú để tạo vân tay số. Để giảm khả năng tạo vân tay số đó, các nhà sản xuất trình duyệt đã đóng băng tiêu đề user-agent hoặc đang nỗ lực để làm như vậy. Đây là một ví dụ khác về việc thay đổi dữ liệu mà một 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 đề tác nhân người dùng trố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 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 dữ liệu trong chuỗi tác nhân người dùng tại phần Giảm thiểu tác nhân người dùng. Tuy nhiên, 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 một phiên bản chính (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 có thông tin chi tiết và sẽ cố định ở một trong số ít các lựa chọn không thay đổi. Vì vậy, một phiên bản Chrome 123.45.67.89 giả định chạy trên một "Windows 20" giả định 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ò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 với 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 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 Safari phiên bản 1234.5.67 giả định chạy trên một macOS 20 giả định có thể cung cấp user-agent như sau:
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 giả định, 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) vẫn có sẵn và Safari trên iOS vẫn cung cấp số phiên bản iOS; nhưng nhiều thông tin phụ trợ có sẵn trước đây đã bị đóng băng. Quan trọng là thông tin này bao gồm cả số phiên bản Safari, nhưng không nhất thiết phải có.
Các 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-cases summarises tóm tắt một số đối số và lý do cho sự thay đổi này, đồng thời Rowan Merewood có một bản trình bày với một số chiến lược để ngừng sử dụng tác nhân người dùng để phân biệt, trong bối cảnh đề xuất về Gợi ý ứng dụng UA được giải thích thêm.
Làm mờ
Vệt mờ là một thuật ngữ trong phương pháp bảo mật, trong đó API được gọi với những giá trị không mong muốn với hy vọng sẽ xử lý 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 đó). Nhà phát triển phụ trách phần phụ trợ sẽ biết về tấn cô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 dữ liệu đầ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ạ nổi bật trong 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 để 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, ở đây, trình duyệt sẽ thực hiện việc này trước (bằng cách cố tình làm cho user-agent 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 để tìm bất kỳ phần phụ thuộc nào vào chuỗi user-agent (tìm kiếm
navigator.userAgent
có thể tìm thấy hầu hết các lần xuất hiện trong mã phía máy khách và mã phụ trợ của bạn có thể sẽ tìm kiếmUser-Agent
dưới dạng tiêu đề), bao gồm cả các phần phụ thuộc. - Nếu bạn tìm thấy các trường hợp 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 (hoặc tìm một 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 nội dung cập nhật). Đôi khi, bạn cần phân biệt trình duyệt để khắc phục lỗi, nhưng tác nhân người dùng sẽ ngày càng không phải là cách để làm việc này sau khi bị treo.
- 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 chính 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 sử dụng một số giá trị cốt lõi vẫn hữu ích), bạn nên thử nghiệm với các tác nhân người dùng sắp ra mắt trong các bản phát hành trình duyệt mới. Bạn có thể tự kiểm thử bằng các phiên bản trình duyệt sắp ra mắt đó thông qua các bản dựng thử nghiệm beta hoặc công nghệ, nhưng cũng có thể đặt chuỗi tác nhân người dùng tuỳ chỉnh để 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 phát triển cục bộ để kiểm tra cách mã 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 ý về khách hàng
Một đề xuất chính để cung cấp thông tin này là Gợi ý cho ứng dụng tác nhân người dùng, mặc dù tính năng này không được hỗ trợ trên tất 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ễ như vẻ bề ngoài vì chúng là 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 trình duyệt gửi các giá trị "rắc rối", 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ư đã đề cập trước đó, đây là ví dụ về việc trình duyệt thực hiện "kiểm thử tìm lỗi mã nguồn" trước. Nhà phát triển sử dụng dữ liệu này phải xử lý dữ liệu đúng cách vì dữ liệu được thiết kế để việc phân tích cú pháp không đúng cách hoặc lười biếng có thể sẽ cho ra 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 các chuỗi không đóng đúng cách.) May mắn thay, trình duyệt cũng cung cấp trực tiếp dữ liệu này cho JavaScript dưới dạng navigator.userAgentData
. Trong trình duyệt hỗ trợ, dữ liệu này 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
}