Sắp hết thời gian dùng thử Quyền truy cập mạng riêng (PNA) cho các bối cảnh không an toàn. Hãy triển khai lời nhắc cấp quyền PNA

Yifan Luo
Yifan Luo

Chrome 124 có tính năng Quyền truy cập mạng riêng tư để thư giãn nội dung hỗn hợp. Chúng tôi đang ngừng sử dụng các trang web cần thêm thời gian để chuẩn bị cho thay đổi này. Tuy nhiên, giai đoạn dùng thử này sẽ kết thúc với Chrome 132, dự kiến sẽ bắt đầu vào ngày 4 tháng 2 năm 2025. Bài đăng này giải thích về thay đổi này, cung cấp thêm thông tin về thiết kế của tính năng, cách di chuyển các trang web hiện tại và cách kiểm thử việc triển khai.

Có điều gì thay đổi?

Để thiết lập kết nối với các thiết bị trên mạng riêng tư không có tên duy nhất trên toàn cầu và do đó không thể lấy chứng chỉ TLS, tính năng này sẽ giới thiệu một tuỳ chọn mới cho fetch() để khai báo ý định của nhà phát triển về việc giao tiếp với một thiết bị như vậy. Bản cập nhật này bao gồm một tính năng mới do chính sách kiểm soát để kiểm soát quyền truy cập của từng trang web vào tính năng này, cũng như các tiêu đề mới cho phản hồi trước khi bay của máy chủ để cung cấp thêm siêu dữ liệu.

Quyền truy cập mạng riêng là gì?

Quyền truy cập mạng riêng (PNA, trước đây gọi là CORS-RFC1918 và gọi tắt là Quyền truy cập mạng cục bộ) là một tính năng bảo mật hạn chế khả năng của các trang web gửi yêu cầu đến máy chủ trên mạng riêng. Điều này giúp bảo vệ người dùng và mạng nội bộ khỏi các cuộc tấn công tiềm ẩn như Giả mạo yêu cầu trên nhiều trang web (CSRF). Chrome đã từng bước triển khai PNA và biện pháp bảo vệ này sẽ được mở rộng trong các bản phát hành sắp tới.

Tại sao cần có lời nhắc cấp quyền?

Chrome 94 đã ra mắt tính năng chặn quyền truy cập vào mạng riêng tư từ các trang web công cộng không an toàn. Chương trình thử nghiệm đang diễn ra Quyền truy cập vào mạng riêng tư từ bối cảnh không an toàn đã cho thấy những thách thức trong việc di chuyển các trang web bị ảnh hưởng sang HTTPS. Một mối lo ngại phổ biến là khó khăn trong việc di chuyển các thiết bị riêng tư sang HTTPS, dẫn đến các lỗi vi phạm quy trình kiểm tra nội dung hỗn hợp.

Để giải quyết thách thức này, chúng tôi đã thêm một lời nhắc cấp quyền mới trong bản dùng thử theo nguyên gốc từ Chrome 120 và trong bản ổn định từ Chrome 124.

Khi nào cần có lời nhắc cấp quyền?

Chúng tôi dự định kết thúc thử nghiệm ngừng sử dụng ngữ cảnh không an toàn sau một vài mốc quan trọng sau khi tính năng lời nhắc cấp quyền ra mắt. Để đảm bảo khả năng tương thích, bạn phải di chuyển các trang web công khai của mình sang HTTPS. Nếu bạn không thể di chuyển máy chủ riêng sang HTTPS, tính năng lời nhắc cấp quyền mới sẽ giúp bạn giảm bớt việc kiểm tra nội dung hỗn hợp.

Quy trình làm việc thông thường cho yêu cầu Truy cập vào mạng riêng có lời nhắc cấp quyền như sau.

Kích hoạt lời nhắc cấp quyền

Thêm thuộc tính targetAddressSpace mới làm tuỳ chọn tìm nạp, sau đó yêu cầu có thể bỏ qua bước kiểm tra nội dung hỗn hợp.

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

Theo Quyền truy cập mạng riêng: giới thiệu tính năng kiểm tra trước, mọi yêu cầu mạng riêng đều phải được thực hiện trước bằng một yêu cầu kiểm tra trước. Yêu cầu kiểm tra này sẽ bao gồm một tiêu đề mới là Access-Control-Request-Private-Network: true và phản hồi tương ứng phải có tiêu đề Access-Control-Allow-Private-Network: true.

Để phù hợp với lời nhắc cấp quyền mới, các thiết bị phải tích hợp 2 tiêu đề phản hồi mới: Private-Network-Access-NamePrivate-Network-Access-ID.

  • Private-Network-Access-ID: Giá trị 48 bit được trình bày dưới dạng 6 byte thập lục phân được phân tách bằng dấu hai chấm.
  • Private-Network-Access-Name: Tên hợp lệ dưới dạng chuỗi khớp với biểu thức chính quy ECMAScript /^[a-z0-9_-.]+$/.. Chiều dài tối đa của tên là 248 đơn vị mã UTF-8.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

Bản minh hoạ

Bạn có thể xem bản minh hoạ tại: https://private-network-access-permission-test.glitch.me/.

Bạn cần khởi động máy chủ riêng tư cá nhân để sử dụng trang web minh hoạ. Máy chủ riêng sẽ phản hồi bằng tiêu đề HTTP Access-Control-Allow-Private-Network: true, cùng với các tiêu đề do máy chủ chỉ định Private-Network-Access-IDPrivate-Network-Access-Name. Nếu mọi thứ được thiết lập chính xác, bạn sẽ thấy lời nhắc cấp quyền sau:

Thoát khỏi bản dùng thử ngừng sử dụng ngữ cảnh không an toàn

Đối với những trang web đã đăng ký dùng thử tính năng ngừng sử dụng Quyền truy cập mạng riêng cho các ngữ cảnh không an toàn, giờ đây là lúc bạn di chuyển trang web của mình bằng lời nhắc cấp quyền mới của chúng tôi và thoát khỏi bản dùng thử.

Sau khi cập nhật mã, hãy xoá mã thông báo dùng thử trong tiêu đề HTML, JavaScript hoặc HTTP. Nếu bạn không nhớ mình đã đặt mã thông báo dùng thử ở đâu, hãy tham khảo phần Đăng ký dùng thử phiên bản ngừng hoạt động trong bài đăng trên blog trước.

Bạn cũng nên xoá mã thông báo trong trang của bản dùng thử.

Tiếp theo là gì?

Giải pháp cho các yêu cầu từ fetch() không phải API vẫn đang được nghiên cứu.

Một số giải pháp đã được thử nghiệm, chẳng hạn như sử dụng trình chạy dịch vụ hoặc đặt không gian địa chỉ mục tiêu làm Content-Security-Policy mới. Tuy nhiên, hình thức cuối cùng của các yêu cầu từ fetch() không phải API vẫn đang được điều tra.

Trong tương lai, các yêu cầu từ khung con có thể được hỗ trợ bằng chính sách quyền.

Trong tương lai, chúng tôi có thể muốn hỗ trợ các chính sách về quyền để nới lỏng khả năng cho khung phụ.

Ý kiến phản hồi về các trường hợp sử dụng mạng riêng tư

Nếu bạn lưu trữ một trang web trên một mạng riêng cần yêu cầu từ các mạng công cộng, thì nhóm Chrome rất mong nhận được ý kiến phản hồi của bạn! Báo cáo vấn đề tại Công cụ theo dõi lỗi Chromium (thành phần: Blink>SecurityFeature>CORS>PrivateNetworkAccess) hoặc trên kho lưu trữ GitHub.

Tài nguyên