通过Nginx设置HttpOnly Secure SameSite参数解决Cookie跨域丢失

摘要:
在前面的文章中“谷歌浏览器Chrome80版本默认SameSite导致跨域请求Cookie丢失”,我们知道Chrome升级到80版本后,默认限制了跨域携带cookie给后端。将HttpOnly设置为true防止程序获取cookie后进行攻击。SameSite:Chrome浏览器在51版本后为Cookie新增的属性,用来防止CSRF攻击和用户追踪。不过,前提是必须同时设置Secure属性,否则无效。

在前面的文章中“谷歌浏览器Chrome 80版本默认SameSite导致跨域请求Cookie丢失”,我们知道 Chrome 升级到80版本后,默认限制了跨域携带cookie给后端。我们也提到了可以修改Chrome的设置或在服务端添加SameSite设置来解决,但是普通的Web框架需要升级到最新版本才支持SameSite属性,升级Web框架成本太高,因此本文使用Nginx来解决SameSite问题的办法(需要使用Nginx反向代理站点)。

一、Cookie安全相关属性

HttpOnly :

在Cookie中设置了“HttpOnly”属性,通过程序(JS脚本、Applet等)将无法读取到Cookie信息。

将HttpOnly 设置为true 防止程序获取cookie后进行攻击。

Secure :

安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问。

设置了Secure (没有值),则只有当使用https协议连接时cookie才可以被页面访问。可用于防止信息在传递的过程中被监听捕获后信息泄漏。

SameSite:

Chrome浏览器在51版本后为 Cookie 新增的属性,用来防止 CSRF 攻击和用户追踪。可以设置三个值:Strict、 Lax、 None

Strict:完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。Set-Cookie: CookieName=CookieValue; SameSite=Strict;

Lax:规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。Set-Cookie: CookieName=CookieValue; SameSite=Lax;设置了Strict或Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。

None:Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。Set-Cookie: key=value; SameSite=None; Secure

二、配置路径

要通过nginx配置SameSite,可以在 nginx.conf 的 location 节点下进行配置:

proxy_cookie_path/"/;httponly;secure;SameSite=Lax";

配置示例:

server {
    listen 443 ssl http2;
    server_name www.demo.com;
ssl_certificate /etc/letsencrypt/live/cat73.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cat73.org/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/cat73.org/chain.pem;
# add_header X-XSS-Protection "1; mode=block";
    # add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=15768000";
location / {
        root /var/www/html;
}
    
    location /api {
        proxy_pass http://localhost;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 配置位置如下
        proxy_cookie_path / "/; httponly; secure; SameSite=None";
}
}

免责声明:文章转载自《通过Nginx设置HttpOnly Secure SameSite参数解决Cookie跨域丢失》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇博科SAN交换机基本配置(华为SNS系列交换机为例OEM博科)联想笔记本如何安装固态硬盘-联想G50-80如何安装固态硬盘(全流程+装系统)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Laravel5.1 响应--Response

最基本的HTTP响应只需在路由闭包或控制器动作中返回一个简单字符串即可,但是具体业务逻辑中大部分响应都是在控制器动作中返回Response实例或者视图。Response是继承自SymfonyComponentHttpFoundationResponse的IlluminateHttpResponse类的一个实例,我们可以使用该实例上的一系列方法来创建HTTP...

配置nginx 反向代理

新项目集成公司统一的SSO登陆,登陆域名aaa。前端启动服务localhost:10002,自动跳转到登陆地址,登陆成功后会进行跨域访问。 解决方案:nginx 反向代理1.安装nginx:   brew install nginx 如果遇到update Homebrew..., control+C终止当前进程,开始下一进程安装。 2.安装成功后,启动su...

docker学习

Docker 介绍 docker是什么 操作系统级别的虚拟化,基于linux内核的namespace和cgroup docker 与虚拟机对比 启动秒级,虚拟机是分钟级别 磁盘几M,虚拟机G级别 隔离程度相比虚拟机较低 应用场景 打包程序发布 部署微服务 测试 持续集成 应用程序隔离,环境的一致性,迁移方便   安装配置 官网 www.docker.com...

RuoYi(若依)前后端分离版本,windows下部署(nginx)

摘自:https://blog.csdn.net/yueyekkx/article/details/105505490 上一篇用了tomcat部署(https://blog.csdn.net/yueyekkx/article/details/105491363),还是觉得nginx是王道话不多说开始:还是windows下部署:nginx jar包 前端:1...

Linux curl命令参数详解(6/23)

linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称ur...

2、Docker基础用法

容器镜像:https://hub.docker.com/ Docker架构图:https://ruby-china.org/topics/22004 Docker使用客户端-服务器(client-server)架构模式。Docker客户端会与Docker守护进程进行通信。Docker守护进程会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。...