You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置SameSite:Strict后Cookie仍被跨站发送的问题求助

SameSite:Strict 属性未生效问题排查

我尝试给Cookie设置SameSite:Strict属性,但完全不起作用。

Server1(运行于 http://localhost:5000/)

const express = require('express');
const cookieParser = require('cookie-parser');
var logger = require("morgan");

const app = express();
app.use(cookieParser());
app.use(logger("dev"));

app.get('/', (req, res) => {
    res.cookie('mycookie', 'omarhadidi', {
        sameSite: 'strict'
    });
    res.sendFile('./server.html', {root:__dirname})
})
app.post('/delete-user', (req, res) => {
    console.log('cookies :>> ', req.cookies);
    res.send('I am hacked')
})

app.listen(5000, () => console.log("Server Listening on port 5000"));

Server2(通过VSCode LiveServer运行于 http://localhost:3000/hack.html)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <p id="data"></p>
    <form action="http://localhost:5000/delete-user" method="post">
        <input type="submit" value="Hack">
    </form>
    <script>
        console.log('cookies :>> ', document.cookie);
        const form = document.querySelector("form")
        // form.submit();  I cancelled Here to try to submit it manually using submit button
    </script>
</body>

</html>

问题描述

当我向http://localhost:5000/发送GET请求时,mycookie被成功设置,但当我通过http://localhost:3000/hack.html中的表单向http://localhost:5000/delete-user发送POST请求时,该Cookie仍被发送(Server1中通过console.log('cookies :>> ', req.cookies);打印出了该Cookie)。


原因及解决方案

核心原因

浏览器判断跨站的标准基于协议+主域名/子域名,端口不属于域名判定的一部分。你的两个服务都运行在localhost下,浏览器会认为它们属于同一站点,因此即使设置了SameSite:Strict,依然会携带Cookie。

解决方法

  1. 使用不同域名测试跨站场景
    修改本地hosts文件(Windows路径:C:\Windows\System32\drivers\etc\hosts;Mac/Linux路径:/etc/hosts),添加两条映射:

    127.0.0.1 site1.test
    127.0.0.1 site2.test
    

    然后将Server1绑定到site1.test:5000,Server2绑定到site2.test:3000,此时两个站点属于不同域名,SameSite:Strict会阻止跨站请求携带Cookie。

  2. 确认Express版本兼容性
    旧版本Express可能对SameSite属性支持存在问题,建议升级到最新稳定版:

    npm update express cookie-parser
    
  3. 补充说明
    SameSite:Strict的核心作用是阻止跨站点请求伪造(CSRF),仅当请求发起方站点与Cookie所属站点完全一致时,才会携带Cookie。端口差异不触发跨站判定,这是浏览器的标准行为。

内容的提问来源于stack exchange,提问作者Omar AlHadidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:35:31