如何解决第三方网站弄乱了我网站的 cookie
当用户单击我网站上的按钮时,会打开一个新窗口,供用户浏览项目的第三方网站。单击某个项目后,新窗口将重定向回我的网站,其中包含有关该项目的数据。
此时(在最终重定向回我的网站之后,而不是之前),我网站的会话 cookie(与其他 cookie 一起,我的 csrf 令牌 cookie 也受到影响)被擦除/丢失/刷新或其他什么。如果我在“主”窗口(甚至是新窗口)上重新加载页面,旧会话就会消失,用户将被重定向回我的登录页面。
我网站上的响应标头 set-cookie 示例:
mysite_session=XXXXXXXXXXXXX; path=/; domain=.mysite.test; httponly; samesite=lax
我正在为 PHP 使用 Laravel 框架,尽管这不应该是一个因素,因为在我开始将我的应用程序转换为 Laravel 之前,我使用纯 PHP 遇到了同样的问题。
关于每一步的代码:
- 用户点击了我网站上的按钮。
$(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>
-
用户被重定向到第三方站点(不同的域)。
-
点击某个项目后,用户将被重定向回我的网站 (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 做了一些奇怪的事情,或者我做错了什么?有人有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。