7

不见,Google FloC

 3 years ago
source link: https://scvoet.me/article/say-no-to-google-floc
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

FloC: Federated Learning of Cohorts (队列联合学习)

2021 年 3 月 20 日,谷歌发布的 Chrome 89 中包含了 Floc 并进行小范围 A/B 测试,该部分代码也被包含在其维护的开源项目 Chromium,如不加处理 Floc 将被包含在基于此的若干浏览器中。在 Chrome 89 发布后不久,Firefox 以及基于 Chromium 的 Opera、Brave、Vivaldi 、Edge 均表示拒绝使用 FloC 技术。

什么是 FloC展开目录

当前广告服务商多通过 Cookies 进行追踪用户信息,它被 MDN 称为渐渐被淘汰的技术,而用户也可以通过隐私狐等浏览器插件进行拦截,Cookies 所带来的隐私安全问题已然被控制住。

Cookie 曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现代浏览器开始支持各种各样的存储方式,Cookie 渐渐被淘汰。————《HTTP cookies》 by MDN

在 2020 年,Safari 浏览器完全屏蔽了第三方 Cookie,谷歌也宣布将逐步淘汰对 Chrome 中第三方 Cookie 的支持。

随即谷歌也由此推出 FloC 技术,在它的 GitHub 文档中提到 FloC 是作为替代 Cookies 在广告个性化中作用的技术。它可以采集你过去一周所访问的网站域名,并通过 SimHash 算法给你分配 FloC ID。拥有相同 FloC ID 即与你具有相似兴趣的大批人群将被分配在同一个群组中,这个群组被 FloC 称为 cohort (C),每个群组都拥有一个 FLoC ID。该 ID 将会对所有你所访问的网站显示,这意味着网站将可以通过 FloC ID 和浏览器指纹进行较 Cookie 更精确地描绘出你的用户画像并与你绑定。

目前 FloC 还没有足够多且被证明有效的手段去禁止它,与逐渐被淘汰且可拦截的 Cookie 相比,FloC 将是对我们的隐私安全造成威胁的更大隐患。

如何禁用 FloC展开目录

用户展开目录

如果我正在使用 Chrome 89,我该如何判断自己是否被列入了 FloC 测试计划?

  • 可以通过 EFF 所提供的 Am I FLoCed? 网站 进行检测。
  • 也可以通过在 console (控制台) 中通过命令检测 document 对象下面是否存在 interestCohort() 方法。
document.interestCohort()

如果你发现自己被列入了测试计划并打算禁用 FloC,那么你可以在 Chrome 设置中禁止第三方 Cookie 即可退出 FLoC 测试。但此方案亦会带来副作用,如一些网站的单点登录功能将无法正常运行。

当然你也还可以选择抛弃 Chrome 拥抱 Firefox(我永远喜欢 FF)。

站长展开目录

Chrome 中 FloC 默认在所有网站中启用,但网站所有者也可以通过选择退出 FLoC 来确保他们的网站不参与这个庞大的网络,只需要添加以下自定义 HTTP 响应头即可。

Permissions-Policy: interest-cohort=()

Nginx展开目录

添加以下内容到你的 Nginx 配置文件中。

# default.conf

server {
    location / {
      add_header Permissions-Policy interest-cohort=();

    ...
    }
}

通过 service nginx restart 命令重启 Nginx。

值得注意的是如果一个配置文件被用于多个站点,那么你需要在不同网站块中添加 add_header

Apache展开目录

添加以下内容到 .htaccess 配置文件中。

# .htaccess 

<IfModule mod_headers.c>
  Header always set Permissions-Policy: interest-cohort=()
</IfModule>

通过 service apache2 restart 命令重启 Apache。

Caddy展开目录

添加以下内容到 Caddyfile 配置文件中。

# Caddyfile

example.com {
    header Permissions-Policy "interest-cohort=()"

    ...
}

然后通过 caddy reload 命令重启 Caddy。

Varnish展开目录

将以下内容添加到 Varnish 配置文件中。

# default.vcl

sub vcl_deliver {
    ...

    set resp.http.Permissions-Policy = "interest-cohort=()";

    ...
}

然后通过 service varnish restart 命令重启 Varnish。

Traefik展开目录

将以下内容加入你的 Treafik toml 配置文件中。

# traefik.toml

[http.middlewares]
  [http.middlewares.floc.headers]
    [http.middlewares.floc.headers.customResponseHeaders]
        Permissions-Policy = "interest-cohort=()"

如果你使用的配置文件采用 yaml 格式,添加以下内容到你的配置文件中。

# traefik.yml

http:
  middlewares:
    floc:
      headers:
        customResponseHeaders:
          Permissions-Policy: "interest-cohort=()"

如果你通过 docker-compose 部署 Traefik 你也可以在 docker-compose.yml 对响应头进行配置。

# docker-compose.yml

labels:
  - "traefik.http.middlewares.floc.headers.customresponseheaders.Permissions-Policy=interest-cohort=()"

然后执行 docker-compose up -d 命令进行更新。

Lighttpd展开目录

添加以下内容到你的 Lighttpd 配置文件中。

# lighttpd.conf

server.modules += ( "mod_setenv" )

setenv.add-response-header = ( "Permissions-Policy" => "interest-cohort=()" )

通过 service lighttpd restart 命令重启 Lighttpd。

Netlify展开目录

将以下内容添加到 Netlify 配置文件中。

# netlify.toml

[[headers]]
  for = "/*"
  [headers.values]
    Permissions-Policy = "interest-cohort=()"

如果你更喜欢使用 _headers 文件进行添加响应头,则需添加以下内容。

# _headers

/*
  Permissions-Policy: interest-cohort=()

Netlify 将在你下次构建或部署时更新响应头。

GitHub Pages展开目录

目前 GitHub Pages 暂时没有方法可以禁用 FloC,但我已通过工单进行询问解决方案。

在我提交工单的一周后,GitHub Pages 已全部添加该响应头,用户无需任何操作。1

GitLab Pages展开目录

如果你正在使用 GitLab CE (Community Edition) 版,添加以下内容到 gitlab.rb 文件中。

# gitlab.rb

gitlab_pages['headers'] = [ "Permissions-Policy: interest-cohort=()" ]

你也可以在启动 GitHub Pages 二进制文件时附带响应头。

./gitlab-pages -header "Permissions-Policy: interest-cohort=()"

Cloudflare Workers展开目录

添加以下内容到你的 Worker 脚本中。

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  let response = await fetch(request)
  let newHeaders = new Headers(response.headers)
  newHeaders.set("Permissions-Policy", "interest-cohort=()")

  return new Response(response.body, {
    status: response.status,
    statusText: response.statusText,
    headers: newHeaders
  })
}

将此脚本添加到任意域名作为 Worker 路由。

WordPress展开目录

WordPress 允许通过钩子进行自定义响应头。在你当前启用的主题根目录下的 functions.php 文件末尾添加以下内容即可:

# functions.php

function disable_floc($headers) {
    $headers['Permissions-Policy'] = 'interest-cohort=()';
    return $headers;
  }

add_filter('wp_headers', 'disable_floc');

如果你正在使用缓解方案,那么添加响应头后,你需要清理缓存好让缓存替换为最新版本。

参见展开目录


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK