Sẵn sàng cho chế độ cài đặt cookie mới SameSite=None; Secure

Thứ Năm, ngày 16 tháng 1 năm 2020

Đây là một bài đăng trên Blog dành cho nhà phát triển Chromium với chủ đề về những thay đổi trên Chrome và tác động đối với cách trang web hoạt động cho người dùng của bạn trong tương lai.

Vào tháng 5 năm 2019, Chrome đã thông báo một mô hình bảo mật theo mặc định cho cookie, dựa trên một hệ thống phân loại cookie mới (thông số kỹ thuật). Sáng kiến này là một phần trong nỗ lực không ngừng của chúng tôi nhằm cải thiện quyền riêng tư và tính bảo mật trên web.

Chrome dự định triển khai mô hình mới này cho Chrome 80 vào tháng 2 năm 2020. Mozilla và Microsoft cũng đã cho biết ý định triển khai mô hình mới này cho Firefox và Edge, theo lịch trình riêng của họ. Mặc dù còn vài tháng nữa chúng tôi mới áp dụng những thay đổi này trên Chrome, nhưng các nhà phát triển phụ trách quản lý cookie phải đánh giá mức độ sẵn sàng ngay từ hôm nay. Bài đăng trên blog này nêu ra các khái niệm cấp cao; vui lòng xem phần Giải thích về cookie SameSite trên web.dev để tham khảo hướng dẫn cho nhà phát triển.

Các trang web thường tích hợp dịch vụ bên ngoài để phục vụ mục đích quảng cáo, nội dung đề xuất, tiện ích của bên thứ ba, nhúng nội dung trên mạng xã hội và các tính năng khác. Khi bạn duyệt web, những dịch vụ bên ngoài như vậy có thể lưu trữ cookie trong trình duyệt của bạn rồi truy cập vào các cookie đó để cung cấp trải nghiệm phù hợp với từng người dùng hoặc đo lường mức độ tham gia của đối tượng. Mỗi cookie đều liên kết với một miền. Nếu miền liên kết với một cookie khớp với một dịch vụ bên ngoài, chứ không phải trang web trong thanh địa chỉ của người dùng, thì đây được coi là một bối cảnh cross-site (hoặc "bên thứ ba").

Cũng có những trường hợp sử dụng cross-site ít rõ ràng hơn, chẳng hạn như một thực thể sở hữu nhiều trang web và dùng cùng một cookie trên khắp các tài sản đó. Mặc dù cookie và các trang web do cùng một thực thể sở hữu, nhưng trường hợp này vẫn được xem là bối cảnh cross-site hay "bên thứ ba" khi miền của cookie không khớp với trang web mà qua đó cookie được truy cập.

Miền trang web không khớp với miền cookie

Khi một tài nguyên bên ngoài trên trang web truy cập một cookie không khớp với miền của trang web đó, thì đây là bối cảnh cross-site hay "bên thứ ba".

Ngược lại, việc truy cập cookie trong bối cảnh same-site (hay "bên thứ nhất") xảy ra khi miền của cookie khớp với miền của trang web trong thanh địa chỉ của người dùng. Cookie same-site thường dùng để duy trì trạng thái đăng nhập của người dùng vào các trang web riêng, ghi nhớ các lựa chọn ưu tiên của họ và hỗ trợ phân tích trang web.

Miền trang web khớp với miền cookie

Khi một tài nguyên trên trang web truy cập một cookie khớp với trang web mà người dùng đang truy cập, thì đây là bối cảnh same-site hay "bên thứ nhất".

Hiện tại, nếu một cookie chỉ dùng để truy cập trong bối cảnh bên thứ nhất, thì nhà phát triển có thể chọn áp dụng một trong hai chế độ cài đặt (SameSite=Lax hoặc SameSite=Strict) để ngăn việc truy cập từ bên ngoài. Tuy nhiên, rất ít nhà phát triển làm theo phương pháp đề xuất này, dẫn đến việc một số lượng lớn cookie same-site phải tiếp xúc với các mối đe dọa không đáng có như các vụ tấn công bằng cách giả mạo yêu cầu trên nhiều trang web.

Để bảo vệ thêm nhiều trang web và người dùng, mô hình bảo mật theo mặc định mới giả định rằng tất cả cookie đều phải được bảo vệ khỏi việc truy cập từ bên ngoài, trừ trường hợp có chỉ dẫn khác. Nhà phát triển phải dùng một chế độ cài đặt cookie mới là SameSite=None để chỉ định cookie đối với trường hợp truy cập cross-site. Khi có thuộc tính SameSite=None, bạn phải dùng thêm một thuộc tính Secure để cookie cross-site chỉ có thể được truy cập qua kết nối HTTPS. Phương thức này sẽ không giảm thiểu mọi rủi ro liên quan đến việc truy cập cross-site, nhưng sẽ giúp bảo vệ khỏi các cuộc tấn công mạng.

Ngoài những lợi ích bảo mật tức thì, việc khai báo rõ ràng cookie cross-site sẽ giúp tăng cường tính minh bạch và cho người dùng thêm lựa chọn. Ví dụ: các trình duyệt có thể cung cấp cho người dùng quyền kiểm soát cụ thể để quản lý các cookie mà một trang web truy cập, riêng biệt với các cookie được nhiều trang web truy cập.

Chrome bắt đầu thực thi vào tháng 2 năm 2020

Khi Chrome 80 ra mắt vào tháng 2, Chrome sẽ coi các cookie chưa khai báo giá trị SameSite là cookie SameSite=Lax. Chỉ cookie có chế độ cài đặt SameSite=None; Secure mới chấp nhận việc truy cập từ bên ngoài, miễn là những cookie đó được truy cập qua kết nối an toàn. Trang theo dõi trạng thái nền tảng Chrome cho các thuộc tính SameSite=NoneSecure sẽ tiếp tục được cập nhật cùng những thông tin ra mắt mới nhất.

Mozilla đã khẳng định rằng họ ủng hộ mô hình phân loại cookie mới này qua dự định triển khai yêu cầu đối với SameSite=None; Secure cho cookie cross-site trong Firefox. Gần đây, Microsoft đã thông báo kế hoạch bắt đầu triển khai mô hình này dưới dạng thử nghiệm trong Microsoft Edge 80.

Cách chuẩn bị và những điểm phức tạp đã biết

Nếu quản lý cookie cross-site thì bạn sẽ cần áp dụng chế độ cài đặt SameSite=None; Secure cho những cookie đó. Việc triển khai sẽ khá đơn giản đối với đa số nhà phát triển, nhưng bạn nên bắt đầu thử nghiệm ngay để xác định những điểm phức tạp và trường hợp đặc biệt, chẳng hạn như sau:

  • Không phải tất cả ngôn ngữ và thư viện đều hỗ trợ giá trị None, nên nhà phát triển phải trực tiếp thiết lập tiêu đề cookie. Kho lưu trữ GitHub này cung cấp hướng dẫn về cách triển khai SameSite=None; Secure bằng nhiều ngôn ngữ, thư viện và khung.
  • Một số trình duyệt (bao gồm cả một số phiên bản của trình duyệt Chrome, Safari và UC) có thể xử lý giá trị None theo cách không mong muốn, nên nhà phát triển phải lập trình các trường hợp ngoại lệ đối với những ứng dụng đó. Danh sách này bao gồm cả các WebView của Android chạy phiên bản Chrome cũ. Sau đây là danh sách ứng dụng không tương thích đã biết.
  • Nhà phát triển ứng dụng nên khai báo các chế độ cài đặt SameSite cookie phù hợp cho WebViews của Android dựa trên phiên bản Chrome tương thích với giá trị None, đối với cả cookie được truy cập qua tiêu đề HTTP(S) và qua API cookieManager của WebView của Android, mặc dù mô hình mới sẽ chưa được thực thi trên WebView của Android trong thời gian sắp tới.
  • Quản trị viên CNTT của doanh nghiệp có thể phải triển khai chính sách đặc biệt để tạm thời khôi phục trình duyệt Chrome về chế độ cũ nếu một số dịch vụ như đăng nhập một lần hoặc ứng dụng nội bộ chưa sẵn sàng ra mắt vào tháng 2.
  • Nếu có cookie mà bạn truy cập trong cả bối cảnh bên thứ nhất và bên thứ ba, thì bạn có thể cân nhắc sử dụng cookie riêng biệt để hưởng các lợi ích bảo mật của SameSite=Lax trong bối cảnh bên thứ nhất.

Phần Giải thích về cookie SameSite cung cấp hướng dẫn cụ thể cho các tình huống trên cũng như cung cấp các kênh để đưa ra vấn đề và thắc mắc.

Để kiểm tra tác động của chế độ mới của Chrome đối với trang web hoặc cookie mà bạn quản lý, bạn có thể chuyển đến chrome://flags trong Chrome 76 trở lên và bật thử nghiệm "SameSite by default cookies" và "Cookies without SameSite must be secure". Ngoài ra, những thử nghiệm này sẽ tự động được kích hoạt cho một nhóm nhỏ người dùng Chrome 79 Beta. Một số người dùng Beta đang thử nghiệm có thể gặp vấn đề không tương thích với các dịch vụ chưa hỗ trợ mô hình mới. Người dùng có thể chọn không tham gia thử nghiệm Beta bằng cách truy cập vào chrome://flags và tắt các thử nghiệm đó.

Nếu quản lý các cookie chỉ được truy cập trong bối cảnh same-site (cookie same-site) thì bạn sẽ không cần làm gì; Chrome sẽ tự động ngăn thực thể bên ngoài truy cập những cookie đó, ngay cả khi thiếu thuộc tính SameSite hoặc không đặt giá trị. Tuy nhiên, bạn nên áp dụng một giá trị SameSite (Lax hoặc Strict) phù hợp và không dựa vào chế độ mặc định của trình duyệt vì theo mặc định, không phải trình duyệt nào cũng bảo vệ cookie same-site.

Cuối cùng, nếu lo ngại về mức độ sẵn sàng của nhà cung cấp và những người khác cung cấp dịch vụ cho trang web của bạn, thì bạn có thể kiểm tra các cảnh báo trên bảng điều khiển Công cụ cho nhà phát triển trong Chrome 77 trở lên khi một trang chứa cookie cross-site chưa có các chế độ cài đặt bắt buộc:

Cookie liên kết với một tài nguyên cross-site tại (miền cookie) được đặt mà không có thuộc tính "SameSite"

Một số nhà cung cấp (bao gồm cả một số dịch vụ của Google) sẽ triển khai những thay đổi cần thiết trong vài tháng trước khi Chrome 80 ra mắt vào tháng 2. Bạn nên liên hệ với các đối tác để xác nhận xem họ đã sẵn sàng chưa.