• 解决新版谷歌Chrome浏览器Cookie跨域失效问题


            谷歌 Chrome80 在 2020年2月4号发布的版本(schedule)会逐渐屏蔽第三方Cookie,即默认为所有Cookie加上SameSite=Lax属性(Cookies default to SameSite=Lax),并且拒绝为不安全的Cookie设置SameSite=None属性(Reject insecure SameSite=None cookies),这样是为了从源头屏蔽跨站请求伪造CSRF(Cross Site Request Forgery)漏洞。

    解决方法

            方法一

                    通过部署第三方代理(例如nginx等)指定SameSite属性来解决跨域问题(前提:需要部署https)

    修改nginx配置文件

    1. server {
    2. listen 443 ssl;
    3. # 证书公钥文件路径
    4. ssl_certificate /xxx/xxx.pem;
    5. # 证书私钥文件路径
    6. ssl_certificate_key /xxx/xxx.key;
    7. location / {
    8. proxy_pass http://127.0.0.1:8080/;
    9. proxy_redirect default;
    10. proxy_cookie_path / "/; secure; SameSite=None";
    11. client_max_body_size 1000M;
    12. }
    13. ......
    14. }

            方法二

                    异构系统通过反向代理,配置成同域(URL的协议、域名和端口相同),然后通过nginx代理访问各系统

    nginx配置如下:

    1. #user root root;
    2. worker_processes 1
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. server {
    12. listen 80;
    13. server_name localhost 192.168.1.3;
    14. location /a/ {
    15. proxy_pass http://192.168.1.1;
    16. proxy_set_header Host $host:$server_port;
    17. proxy_set_header X-Real-IP $remote_addr;
    18. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    19. client_max_body_size 100m;
    20. client_body_buffer_size 128k;
    21. proxy_connect_timeout 90;
    22. proxy_send_timeout 300;
    23. proxy_read_timeout 300;
    24. proxy_buffer_size 4k;
    25. proxy_buffers 4 32k;
    26. proxy_busy_buffers_size 64k;
    27. proxy_temp_file_write_size 64k;
    28. }
    29. location /b/ {
    30. proxy_pass http://192.168.1.2;
    31. proxy_set_header Host $host:$server_port;
    32. proxy_set_header X-Real-IP $remote_addr;
    33. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    34. client_max_body_size 100m;
    35. client_body_buffer_size 128k;
    36. proxy_connect_timeout 90;
    37. proxy_send_timeout 300;
    38. proxy_read_timeout 300;
    39. proxy_buffer_size 4k;
    40. proxy_buffers 4 32k;
    41. proxy_busy_buffers_size 64k;
    42. proxy_temp_file_write_size 64k;
    43. }
    44. error_page 500 502 503 504 /50x.html;
    45. location = /50x.html {
    46. root /usr/share/nginx/html;
    47. }
    48. }
    49. }

            方法三

                     对于http的系统,修改chrome安全策略

    1、打开chrome,输入

    chrome://flags/

    2、搜索

    SameSite by default cookies

    找到如下两项,并都设置为 Disable

    1. SameSite by default cookies
    2. Cookies without SameSite must be secure

    注意: Chrome 91 版本(2021年5月26日)更新后,默认已移除以下配置项,无法再通过此方案解决

  • 相关阅读:
    使用Curl 实现 本地 以及远程设备的请求
    GO 中的指针?
    Android 夸应用传递数据 传递 Parcelable对象
    gradle快速入门
    bugku 树木的小秘密
    【Redis入门笔记 02】基础知识与常见数据类型
    java线性并发编程介绍-锁
    Swing程序设计(4)JLabel标签和导入图片
    uni-app 之 NoticeBar 滚动通知,横向滚动,竖/纵向滚动
    【Pandas数据处理100例】(九十八):Pandas使用between_time()筛选出给定时间区间的数据
  • 原文地址:https://blog.csdn.net/zhiwenganyong/article/details/125452831