浏览器能否先设置cookie再跳转_如何快速技术升级?应对Chrome新版禁非法读取第三方Cookie...

01 如何快速升级

有同学来问我如何快速技术升级?

以应对近期谷歌将在2月4日Chrome80版中对第三方Cookie的禁止非法读取。

新规则是:仅“ SameSite=None; Secure ”的第三方Cookie才能被Chrome发送给服务器。

简单说就是:第三方服务要想读取第三方Cookie,技术升级需要满足如下两个条件:

1.在种Cookie时需按如下声明

Set-Cookie: my_cookie=abc123; SameSite=None; Secure

2.读取Cookie接收的网络URL必须是HTTPS的

https://github.com/GoogleChromeLabs/samesite-examples

网站中已给出了各种语言代码的样例:

PHP:

PHP 7.3.0 已支持 setcookie() 函数

setcookie('cross-site-cookie', 'bar', ['samesite' => 'None', 'secure' => true]);

早期版本的PHP需使用 header() 函数

header('Set-Cookie: cross-site-cookie=bar; SameSite=None; Secure');

JavaScript:

document.cookie = 'cross-site-cookie=bar; SameSite=None; Secure';

JAVA:

目前也只能通过setHeader() 函数设置

response.setHeader("Set-Cookie", "key=value; SameSite=None; Secure”);

Python:

Python 3.8 Bate中:http.cookies 增加了相关支持

否则还是需要使用header来设置

Python - Flask:

resp.headers.add('Set-Cookie','cross-site-cookie=bar; SameSite=None; Secure')

ASP.NET:

可参考如下文章打补丁,然后就可用了:

https://github.com/GoogleChromeLabs/samesite-examples/blob/master/aspnet.md

当然在上述代码使用 setHeader() 函数,要小心在复杂架构及框架组合下,覆盖其他cookie的设置代码。

上面我们先讲了供各技术快速升级的实操结论,如何快速升级解决2月4日Chrome80新版对第三方Cookie禁止非法读取。

02 CSRF攻击的危害

下面我们来看看为什么要对第三方Cookie禁止非法读取,重点还是为了防止CSRF(跨站点请求伪造Cross—Site Request Forgery)攻击:

由于Http协议是无状态的,所以很多网站需要能跟踪用户的状态,就需要在用户的浏览器中种下Cookie。

(有关于cookie的基本概念以及CookieMapping的内容可参看旧文《什么是CookieMapping》 )

举个CSRF攻击的例子:

用户在某金融网站a-bank.com成功登陆时,服务器便可给浏览器发一个cookie并存在用户电脑上

Set-Cookie:a-bank-id=q89df;

若该用户访问了一个恶意网站bad.com时,该恶意网站若诱骗该用户模拟登录等操作时,该金融网站会收到已被保存Cookie请求,并认为是该用户的真实请求,而为期进行账务操作,即该金融网站遭到了CSRF攻击,造成的无法挽回的损失。

当然第三方Cookie还可帮助很多网络服务商(尤其是第三方广告服务商),在用户访问其他网站时,能够追踪该用户,为其提供精准的广告服务。

只要在网站中插入一张广告图片的服务即可:

03 关于SameSite

Cookie新增SameSite属性限制第三方Cookie的非法使用,降低安全风险。三个值:StrictLaxNone

协议规范文件可参看:

https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00

Strict

最严格,完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie。换言之,只有当前网页的URL与请求目标一致,才会带上Cookie。

Set-Cookie: CookieKey=CookieValue; SameSite=Strict;

由于规则过于严格,用户体验非常不好。例如,当前网页有一个a.com的链接,用户点击跳转至a.com时不会携带其Cookie,跳转过去总是未登录状态。

Lax

规则稍稍放宽,大多数情况也是不发送第三方Cookie,但是有三种情况例外:

链接:

预加载:

GET表单:

如下情况均被禁止:

POST表单:

iframe:

AJAX:$.get("...")

Image:

可见设置了Strict或Lax,基本能杜绝CSRF攻击。但前提是用户浏览器支持SameSite属性。

None

Chrome新版将会以Lax为默认设置。要想第三方服务能读取到Cookie,就需要如本文开头的那样,在种Cookie是显式设置SameSite=None。而且必须同时设置Secure属性(Cookie只能通过HTTPS协议发送),否则无效。

Set-Cookie: my_cookie=abc123; SameSite=None; Secure

04 结语

当然,近期还有消息称:1月14日,谷歌宣布Chrome浏览器将在“两年内”逐步淘汰跨网站第三方cookie的使用。

我的个人观点:

1.广告占谷歌商业板块中非常大的比重,即使第三方cookie被彻底关闭,很可能也会效仿移动端ADID那样,提供给用户一个可重置可关闭追踪,用户可对个人隐私保护进行设置的东东。

2.在这个新规范新机制不断完善升级的过程中,很多可能会尝试辅助“浏览器指纹”技术来追踪用户,但从个人隐私保护角度来看,“浏览器指纹”迟早也会被各种办法堵上的。

3.而且国内特殊的网络情况,只要不是国内浏览器厂商加速升级,Chrome新版极其覆盖广告流量的占比可能不会那么快的上来。

关于这个问题的发展,还是让我们持续关注吧!

相关参考内容:

https://web.dev/samesite-cookies-explained/

https://github.com/GoogleChromeLabs/samesite-examples

- 广告分割线 -

若以上内容还不过瘾,更多精彩干货尽在如下视频课:

《24小时精通程序化广告课程录播_高清PPT图_不限时》

《16小时入门Martech数字化转型,玩转广告商业化》

《大数据人工智能贯穿广告营销作业前中后期的创新应用》

《线性智能预测统计学实务(0基础统计学上手实务系列—大数据人工智能的重要基石)》

《运营优化A/B测试统计学实务(0基础统计学上手,大数据人工智能的重要基石)》

《统计学基础入门(0基础统计学上手实务系列—大数据人工智能的重要基石)》

《0基础迅速掌握演讲技能》

《职场打怪试炼能力地图》

可千聊App中搜 “程序化广告实战” 视频直播间

(转载请注明出处:微信订阅号:ad_automation )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Apache Shiro中,您可以使用`org.apache.shiro.web.servlet.SimpleCookie`类来创建和设置Cookie对象,并将SameSite属性设置为STRICT。以下是一个示例代码: ```java import org.apache.shiro.web.servlet.SimpleCookie; // 创建一个SimpleCookie对象 SimpleCookie cookie1 = new SimpleCookie("cookie1"); cookie1.setValue("value1"); cookie1.setSameSite("Strict"); // 设置SameSite属性为STRICT SimpleCookie cookie2 = new SimpleCookie("cookie2"); cookie2.setValue("value2"); cookie2.setSameSite("Strict"); // 设置SameSite属性为STRICT // 将Cookie转换为字符串,添加到响应头中 String cookie1String = cookie1.toServletString(); String cookie2String = cookie2.toServletString(); // 将Cookie添加到响应头中 response.addHeader("Set-Cookie", cookie1String); response.addHeader("Set-Cookie", cookie2String); ``` 在这个示例中,我们使用`SimpleCookie`类创建了两个Cookie对象,并将其SameSite属性设置为STRICT。然后,使用`toServletString()`方法将每个Cookie对象转换为字符串表示形式,并将其添加到响应头中的Set-Cookie标头中。 请注意,上述示例中的`response`对象是一个`javax.servlet.http.HttpServletResponse`类型的对象,您需要根据您的实际情况进行调整。同样,您需要根据您的代码逻辑和框架来获取`response`对象。 这种方法适用于使用Apache Shiro框架的Java应用程序,以设置响应标头中的Set-Cookie,并将SameSite属性设置为STRICT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值