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 vào mạng riêng để giảm bớt nội dung hỗn hợp. Chúng tôi đang tiến hành bản dùng thử cho ngừng sử dụng dành cho các trang web cần thêm thời gian để chuẩn bị cho thay đổi này. Tuy nhiên, bản dùng thử này sẽ kết thúc với Chrome 126, dự kiến sẽ ra mắt vào ngày 4 tháng 9 năm 2024. Bài đăng này sẽ giải thích về sự thay đổi đó, thông tin thêm 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ử cách triển khai.

Điều gì sẽ thay đổi?

Để thiết lập kết nối với các thiết bị trên một mạng riêng không có tên riêng biệt trên toàn cầu và do đó không thể lấy chứng chỉ TLS, tính năng này giới thiệu một tuỳ chọn mới để fetch() khai báo ý định của nhà phát triển là trò chuyện với một thiết bị như vậy. Trong đó 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 mỗi trang web vào tính năng này và một số tiêu đề mới cho phản hồi kiểm tra của máy chủ để cung cấp siêu dữ liệu bổ sung.

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 ngắn gọn 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ác trang web gửi yêu cầu đến máy chủ trong 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 những cuộc tấn công có thể xảy ra như Giả mạo yêu cầu trên nhiều trang web (CSRF). Chrome đang dần triển khai PNA và khả năng bảo vệ 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 đã áp dụng quy tắc chặn quyền truy cập mạng riêng từ các trang web công khai không an toàn. Bản dùng thử ngừng sử dụng tính năng Quyền truy cập mạng riêng từ ngữ cảnh không an toàn đang diễn ra đã 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 thường gặp là khó di chuyển các thiết bị riêng tư sang HTTPS, dẫn đến các lỗi vi phạm về 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 lời nhắc cấp quyền mới trong bản dùng thử theo nguyên gốc của Chrome 120 và trong bản ổn định trong Chrome 124.

Khi nào cần được nhắc cấp quyền?

Chúng tôi dự định kết thúc giai đoạn dùng thử ngừng sử dụng ngữ cảnh không an toàn vào 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, thì tính năng nhắc cấp quyền mới sẽ cho phép bạn kiểm tra nội dung hỗn hợp dễ dàng hơn.

Quy trình công việc thông thường cho một yêu cầu Quyền truy cập mạng riêng có lời nhắc cấp quyền diễn ra như sau.

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

Khi bạn thêm thuộc tính targetAddressSpace mới làm tuỳ chọn tìm nạp, thì 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 các chuyến kiểm tra kiểm tra, mọi yêu cầu mạng riêng đều đứng sau một yêu cầu kiểm tra. 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 bao gồm tiêu đề Access-Control-Allow-Private-Network: true.

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

  • Private-Network-Access-ID: Một 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ạng chuỗi khớp với biểu thức chính quy của ECMAScript /^[a-z0-9_-.]+$/. Độ 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ủa mình để sử dụng trang web minh hoạ. Máy chủ riêng tư sẽ phản hồi bằng tiêu đề HTTP Access-Control-Allow-Private-Network: true, cùng với các tiêu đề Private-Network-Access-IDPrivate-Network-Access-Name do máy chủ chỉ định. Nếu mọi thứ được thiết lập chính xác, lời nhắc cấp quyền sau đây sẽ hiển thị:

Thoát khỏi thử nghiệm ngừng sử dụng theo bối cảnh không an toàn

Đối với các trang web đã đăng ký bản dùng thử ngừng sử dụng tính năng Quyền truy cập mạng riêng để ngữ cảnh không an toàn, đây là lúc để bạn di chuyển trang web của mình kèm theo 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ử ngay bây giờ.

Sau khi cập nhật mã, hãy xoá mã dùng thử trong các tiêu đề HTML, JavaScript hoặc HTTP của bạn. Nếu bạn không nhớ vị trí đặt mã thông báo dùng thử, hãy tham khảo phần Đăng ký dùng thử việc ngừng sử dụng trong bài đăng trên blog trước đó.

Bạn cũng nên xoá mã thông báo này 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 trong quá trình khám phá.

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ạo không gian địa chỉ mục tiêu làm Chính sách bảo mật nội dung mới. Tuy nhiên, hình dạng cuối cùng cho các yêu cầu từ fetch() không phải API vẫn đang được điều tra.

Chính sách về quyền có thể hỗ trợ yêu cầu từ khung phụ trong tương lai.

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

Phản hồi về các trường hợp sử dụng mạng riêng

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 khai, thì nhóm Chrome rất mong nhận được ý kiến phản hồi của bạn! Gửi 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