nginx(七十二)nginx中与cookie相关的细节探讨

news/2024/5/18 14:29:34 标签: nginx, Cookie

背景知识铺垫

  nginx中与cookie相关

①  Cookie请求头内容回顾

 cookie的形式和属性

②   nginx获取cookie值的两种方法

1) $http_cookie  -->获取Cookie请求头"所有值"

2) $COOKIE_flag  -->获取Cookie请求头的"某个key"

  [1]、'脱敏'场景在'日志'中只记录'非敏感'的key

  [2]、由于nginx会进行'lowcase',将所有的字符转化为'小写',推荐使用$COOKIE_lowercase形式

3) nginx也可通过'map'获取指定的cookie

4) 理解了'Cookie'请求头的构成,就理解了'方法二'的正则

③   nginxCookie请求头限制

常见: 响应头中的'Cookie'头大,导致'400'报错

client_header_buffer_size

相关参考

If the directive is specified on the server level,\

  the value from the 'default server' can be used  --> "如何理解"?

解读: 如果指令是在'server'级别指定,则仅server为'默认server'才使用'该指令'

off:  默认判定'请求头'无效

除了下划线,nginx还可能丢弃哪些请求头

重点: nginx对ignore_invalid_headers'无效头'的判定

1) 就是'英文字母'、'数字'、'连字号'和'下划线'

2) 对'下划线'进行特殊处理,下划线可以通过'underscores_in_headers'控制

特殊场景: 需要'_下划线'、'.点 --> key为 a.b'

  

 

1) 如果'带invalid_header'且'打开ignore_invalid_headers on'配置,就会'输出日志'并忽略

2) error_log logs/error.log info;

3) error.log的'日志级别'有debug, info, notice, warn, error, crit, alert, emerg

4) 打开'error_log'的info日志,可以看到'告警'信息

client sent invalid header line: "xxxx" while reading client request headers

③  nginx对上游Set-Cookies响应头属性的处理

proxy_cookie_xxx指令的深入了解

+++++++++ "(1) 属性的处理" +++++++++

常见:'domain'、'path'、'secure'、'httponly'、'samesite'属性'修改'

涉及'3'个指令:

  [1]、proxy_cookie_domain   --> 默认是'off'

  特点:通过Set-Cookies中的'domain属性'来判断,进行'pdomain'属性的修改

  [2]、proxy_cookie_path     --> 默认是'off'

  特点:通过Set-Cookies中的'path属性'来判断,进行'path'属性的修改

  思考:正则形式是'第一个'还是'所有的'匹配

  特殊1:proxy_cookie_path / "/;secure"  --> "可以附加其它属性",使用'不规范'

  特殊2:proxy_cookie_path  '非'正则时候应该是'前缀替换',而不是'中间替换'或'全局替换'

  [3]、proxy_cookie_flags    --> 默认是'off','1.19.3'版本引入

  特点:通过Set-Cookies中的'key'来判断,进行'相关属性'的修改

注意:每个指令的'default值',以及'指令'哪个'版本'提供的

补充:只是'单向'对'上游响应头Set-Cookies'的处理

说明:两个'维度' --> 基于'cookie-av'进行'av'修改;基于'key'进行'av'修改

'多指令'附加'细节':

  1) 由于可能包含多个'Set-Cookies'响应头,nginx也可能包含多个'属性指令',以及多个'相同'指令

  2) 某一个'Set-Cookies'经过相同指令'cookie-av'属性的洗礼,第一个'属性指令'匹配即'停止'

  3) 再继续经过其它'cookie-av'处理
​
注意: 一些高级属性与'nginx版本'的适配

相关属性见该博客

+++++++++ "(2) Set-Cookies响应头的处理" +++++++++

1)	proxy_cache_valid '指令'

如果包括 'Set-Cookie' 响应头,该响应'不会'被缓存

2) 	proxy_ignore_headers

3)  proxy_hide_header

思考: 哪些'响应头字符'是合法的

备注:'点'在ASCII中是46'2e',至少是'满足RFC规范'的

案例: 响应头'eg --> "Host "'带空格,nginx处理'报错'

④    nginx处理跨域请求Cookie

+++++++++++ "细节点" +++++++++++

1) 204 '状态码'  --> add_header 'always'

HTTP 204状态码含义: 请求已经被处理,但无返回内容'No Content',这里指的是'response body'

'204'的三个应用场景:

   [1]、跨域==> 204 --> add_header 'always'

   [2]、PUT、DELET进行'资源'更新  --> '元数据更新'

   [3]、OPTIONS预检请求,正确['204'],错误['412']

   备注:Range相关的206和416状态码

 204(No-Content),服务器成功处理了请求,但不需要返回任何实体内容

3) 了解'常见报错'

重点理解各种Access-Control-Allow响应头以及跨域的报错

Nginx通过Cookie做灰度就这么简单

默认proxy_set_header Host $proxy_host导致跨域Cookie丢失

nginx 反向代理及 Cookie 的四个问题

nginx 使用 proxy_cookie_path 解决反向代理 cookie 丢失导致无法登录等问题

⑤   Cookienginx的应用 

思考:nginx利用cookie可以'做哪些操作'? --> 'map匹配'

场景:获取Cookie中的信息进行'限流'、'黑白'名单、'灰度'发布等

备注:后续'写一个专栏'

 nginx发送一次请求的完整过程

⑥  Cookie浏览器使用的限制

1) 不同'厂商'的浏览器,并且相同厂商的'不同版本'的浏览器,对Cookie的使用'有差异'

  备注: 涉及Cookie的'存储'和'使用'

2) 后续关注

  [1]、'CSRF'的机制

  [2]、Cookie丢失的原因   --> "抓包分析"
 
    1) 是指请求'没有携带'预期的Cookie

    2) 还是js读取不到后端返回的Set-Cookie

  [3]、session共享方案 --> memcached、tomcat自身的、redis、spring的集成方案

理解lua指令


http://www.niftyadmin.cn/n/274621.html

相关文章

Idea关闭或开启引用提示Usages和Annotations

IDEA的引用提示与Annotation 在2022版本的Idea中,新增了引用提示(Usages)和作者(Annotations)的功能。虽然用起来挺好用的,但对电脑还是有一定的压力,在配置比较低的电脑上,打开一个…

MySQL 删除表中的数据记录详解

文章目录 前言一、删除表中的数据记录? 1.删除特定数据记录2.删除所有数据记录总结 前言 删除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录。在MySQL中可以通过DELETE语句来删除数据记录,该SQL语句可以通过以下几种方式使…

Linux Ansible角色介绍

目录 角色的基础结构 角色来源与应用 Galaxy角色 系统角色 自定义角色 角色(roles)用于层次化、结构化地组织playbookroles通过标准化目录结构来装载变量文件、tasks(模块任务)、handlers(处理程序)、…

【C++】特殊类设计+单例模式+类型转换

目录 一、设计一个类,不能被拷贝 1、C98 2、C11 二、设计一个类,只能在堆上创建对象 1、将构造设为私有 2、将析构设为私有 三、设计一个类,只能在栈上创建对象 四、设计一个类,不能被继承 1、C98 2、C11 五、设计一个…

分类和扩展与继承

文章目录 [TOC](文章目录) 分类定义分类的使用使用场景使用注意点 Extension 扩展分类和扩展的区别 继承的定义使用注意点 新建一个分类 分类基础知识 分类 分类是指为已有的类添加方法,也可以说是将很多很复杂的代码划分为几个分区。 定义 分类的作用是扩展已有…

symfonos 2

目录 扫描 SMB SSH 提权 扫描 由于端口80是打开的,我们试图在浏览器中打开IP地址,但在网页上没有找到任何有用的信息。我们还尝试了dirb和其他目录暴力工具,但没有找到任何东西。 SMB 为了进一步枚举,我们使用Enum4Linux工具并找到了一些有用的信息。我们发现了一个名…

Spark UI 相关说明

Spark UI Spark UI设计思路: 1.简洁明了:Spark UI应该是一个简洁明了的界面,避免过多的信息和操作,让用户能够快速地找到自己想要的信息。 2.可定制:Spark UI应该允许用户根据自己的需求进行定制,比如添…

mac免费杀毒软件哪个好用?如何清理mac系统需要垃圾

CleanMyMac x是一款功能强大的Mac系统优化清理工具,使用旨在帮助用户更加方便的清理您系统中的所有垃圾,从而加快电脑运行速度,保持最佳性能,更加稳定、流畅、快速!!! CleanMyMac X无疑是目前m…