Làm cách nào để sửa lỗi đặt bộ SameSite cookie thành không có cảnh báo nào? Tiện ích mở rộng của Chrome


41

Tôi đã tạo một tiện ích mở rộng chrome và từ popup.js tôi đã gọi tập lệnh PHP (Sử dụng Xhttprequest) để đọc cookie. Như thế này:

$cookie_name = "mycookie";

if(isset($_COOKIE[$cookie_name]))
{
    echo $_COOKIE[$cookie_name];
}
else{
    echo "nocookie";
}

Nhưng tôi nhận được cảnh báo này có lỗi trong phần mở rộng.

Một cookie được liên kết với tài nguyên trang web chéo tại (Đây là tên miền của tôi) đã được đặt mà không có SameSitethuộc tính. Bản phát hành Chrome trong tương lai sẽ chỉ phân phối cookie với các yêu cầu trên nhiều trang nếu chúng được đặt SameSite=NoneSecure. Bạn có thể xem lại cookie trong các công cụ dành cho nhà phát triển trong Ứng dụng> Lưu trữ> Cookie và xem thêm chi tiết tại https://www.chromestatus.com/feature/5088147346030592https://www.chromestatus.com/feature/5633521622188032 .

Tôi đã cố gắng tạo một cookie như thế này nhưng không được.

setcookie($cookie_name,$cookie_value, time() + 3600*24, "/;samesite=None ","mydomain.com", 1);

Làm theo hướng dẫn từ câu hỏi này .


Nó cũng nói "Bảo mật" có nghĩa là https, tôi đoán vậy.
wOxxOm

bạn có thể làm theo ví dụ này để giải quyết vấn đề này: stackoverflow.com/a/58723552/6215447
Code Cooker

Bạn có thể sử dụng thư viện của bên thứ ba để quản lý cookie trên PHP 5.4+, cung cấp một setcookiesự thay thế cần thêm một đối số $sameSite. Đối số có thể None, Laxhoặc Strict. Một giao diện OOP cũng có sẵn.
caw

Câu trả lời:


24

Tôi cũng đang ở trong "bản dùng thử và lỗi" cho điều đó, nhưng câu trả lời này từ Github của Google Chrome Labs đã giúp tôi một chút. Tôi đã xác định nó vào tệp chính của mình và nó hoạt động - tốt, chỉ với một tên miền của bên thứ ba. Vẫn đang làm bài kiểm tra, nhưng tôi rất muốn cập nhật câu trả lời này với một giải pháp tốt hơn :)

Nếu bạn có PHP cho đến 7.2, như máy chủ của tôi có:

header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');

Hoặc nếu máy chủ của bạn đã được cập nhật lên 7.3, bạn có thể sử dụng:

setcookie('cross-site-cookie', 'name', ['samesite' => 'None', 'secure' => true]);

Một điều khác mà bạn có thể thử kiểm tra cookie, là bật cờ bên dưới, theo cách nói của họ - "sẽ thêm thông báo cảnh báo bảng điều khiển cho mỗi cookie duy nhất có khả năng bị ảnh hưởng bởi thay đổi này":

chrome://flags/#cookie-deprecation-messages

Xem toàn bộ mã tại: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , họ cũng có mã này same-site-cookies.


Tôi đang sử dụng PHP 7.3 và đã sử dụng cả hai (tiêu đề và setcookie) nhưng tôi vẫn nhận được cảnh báo SameSite khi tôi tải một trang với tập lệnh PayPal ... Mặc dù vậy, tôi vẫn sử dụng localhost, liệu nó có khác biệt gì không?
LuBre

@LuBre Hmm có thể. Tôi đã không kiểm tra như thế này chưa, nhưng có ý nghĩa. Ngoài ra, localhost của bạn có SSL không?
Dimas Pante

1
Đáng buồn là int không phải là một vấn đề localhost, tôi cũng gặp cảnh báo trực tuyến này. Tôi muốn nói đó là thứ gì đó ở phía Paypal ...
LuBre

Hmm tốt ... Tôi nghĩ rằng @vir chúng tôi nhận xét bên dưới phù hợp với vấn đề của bạn, có lẽ PayPal chưa quan tâm nhiều đến vấn đề này: P
Dimas Pante

1
cảm ơn vì đã cung cấp cú pháp php 7.3 mới - đã khắc phục vấn đề của tôi
billynoah

24

Khi tính năng mới xuất hiện, SameSite=Nonecookie cũng phải được đánh dấu là Securenếu không chúng sẽ bị từ chối.

Người ta có thể tìm thêm thông tin về sự thay đổi của các bản cập nhật crom và trên bài đăng trên blog này

Lưu ý : không hoàn toàn liên quan trực tiếp đến câu hỏi, nhưng có thể hữu ích cho những người khác đã đến đây vì đây là mối quan tâm của tôi lúc đầu trong quá trình phát triển trang web của tôi:

nếu bạn đang thấy cảnh báo từ câu hỏi liệt kê một số trang web của bên thứ 3 (trong trường hợp của tôi là google.com, huh) - điều đó có nghĩa là họ cần sửa nó và không liên quan gì đến trang web của bạn. Tất nhiên trừ khi cảnh báo đề cập đến trang web của bạn, trong trường hợp thêm Securenên sửa nó.


6
>= PHP 7.3

setcookie('key', 'value', ['samesite' => 'None', 'secure' => true]);

< PHP 7.3

exploit the path
setcookie('key', 'value', time()+(7*24*3600), "/; SameSite=None; Secure");

Emitting javascript

echo "<script>document.cookie('key=value; SameSite=None; Secure');</script>";

1
Thêm một phần thông tin mô tả về câu trả lời của bạn
Lizesh Shakya

ok câu trả lời duy nhất trên trang này thực sự hoạt động và đang hoạt động trong sản xuất: D
Robert Greene

1
Từ tài liệu, các khóa mảng phải được viết thường: link
Tệ nhất là

1
Điều này làm việc cho tôi trong php 5 và j Joomla và chrome!
Hayden Thring

1

Cuối cùng tôi đã sửa lỗi cài đặt Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 cho Chrome 80 bằng cách cài đặt mod_headers:

a2enmod headers

Thêm chỉ thị sau vào cấu hình Apache Virtualhost của chúng tôi:

Header edit Set-Cookie ^(.*)$ "$1; Secure; SameSite=None"

Và khởi động lại Apache:

service apache2 restart

Khi xem xét các tài liệu ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) Tôi nhận thấy điều kiện "luôn luôn" có một số tình huống trong đó nó không hoạt động từ cùng một nhóm tiêu đề phản hồi. Do đó, không sử dụng "always" là điều làm việc với tôi với PHP nhưng các tài liệu cho thấy rằng nếu bạn muốn bao gồm tất cả các cơ sở của mình, bạn có thể thêm lệnh cả có và không có "luôn luôn". Tôi đã không kiểm tra điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.