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的非法使用,降低安全风险。三个值:Strict、Lax、None。
协议规范文件可参看:
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 )