第三方网站弄乱了我网站的 cookie

时间:2021-07-22 01:31:14

标签: javascript php cookies third-party-cookies

当用户单击我网站上的按钮时,会打开一个新窗口,供用户浏览项目的第三方网站。单击某个项目后,新窗口将重定向回我的网站,其中包含有关该项目的数据。

此时(在最终重定向回我的网站之后,而不是之前),我网站的会话 cookie(与其他 cookie 一起,我的 csrf 令牌 cookie 也受到影响)被擦除/丢失/刷新或其他什么。如果我在“主”窗口(甚至是新窗口)上重新加载页面,旧会话就会消失,用户将被重定向回我的登录页面。

我网站上的响应标头 set-cookie 示例:

mysite_session=XXXXXXXXXXXXX; path=/; domain=.mysite.test; httponly; samesite=lax

我正在为 PHP 使用 Laravel 框架,尽管这不应该是一个因素,因为在我开始将我的应用程序转换为 Laravel 之前,我使用纯 PHP 遇到了同样的问题。

关于每一步的代码:

  1. 用户点击了我网站上的按钮。
$(document).on("click", "#btn-open", function()
{
    const url = "https://mysite.test/browse";
    window.open(url, "_blank", "scrollbars=yes,resizable=yes");
});

1.5。打开一个新窗口。这将通过我的网站获取使用第三方网站的 API 的一次性网址。

https://mysite.test/browse 在技术上只是:

<?php
$api = new ThirdPartyApi(/* data and stuff */);
$url = $api->getBrowseUrl();
?>
<html>
<body>
<h1>Wait - Redirecting...</h1>
<script>window.location.href = "<?php $url;?>";</script>
</body>
</html>
  1. 用户被重定向到第三方站点(不同的域)。

  2. 点击某个项目后,用户将被重定向回我的网站 (https://mysite.test/return),其中包含有关该项目的 POST 数据。

https://mysite.test/return 在技术上只是:

<?php
$itemData = json_encode($_POST["item"]);
?>
<html>
<body>
<script>
const itemData = <?php $itemData;?>;
// Do stuff with item data, example commented as it's unrelated
//window.opener.thirdPartyCallbackFunc(itemData);
//window.close();
</script>
</body>
</html>

我就是不明白第三方网站怎么可能以某种方式导致我自己网站的 cookie 被修改。

是否有可能第三方网站对 cookie 做了一些奇怪的事情,或者我做错了什么?有人有什么想法吗?

0 个答案:

没有答案
相关问题