内容安全政策能否与 Google Analytics 和 AdSense 兼容?

Posted

技术标签:

【中文标题】内容安全政策能否与 Google Analytics 和 AdSense 兼容?【英文标题】:Can Content Security Policy be made compatible with Google Analytics and AdSense? 【发布时间】:2016-04-12 15:58:10 【问题描述】:

是否有人知道如何让 CSP(即使使用 default-src 通配符)发挥作用,以便现代 Analytics 脚本将网站每页数据(不仅仅是主页数据)发送到网站所有者的帐户,从而展示 AdSense 广告?

我为我的网站尝试了许多 CSP 变体,包括 的 .htaccess 文件中建议的变体,但都阻止了 Google Analytics 生成每页数据(主页除外)和 Google AdSense接受任何页面上的广告。

Google 的机器没有看到 Analytics 脚本,尽管 Google 的人类总是在我的网站源代码中看到它。即使将 CSP default-src 设置为星号通配符也失败了。

在 Google 论坛和非 Google 论坛上提问没有任何效果,只是人们说问题出在我的 CSP 上,而我收到一封电子邮件说我应该完全评论 CSP。最后一次奏效了。注释掉应该不比 default-src 通配符好,但注释掉是我获得广告和网站内部数据的唯一方法。

大约一个月前,我向 Google 发布了关于不兼容问题的帖子,但没有答案反驳 (https://www.en.advertisercommunity.com/t5/Code-Implementation/content-security-policy-and-Analytics-and-likely-AdSense/m-p/491031)。

Google Analytics and Content-Security-Policy header> 上的 Stack Overflow 回答并不表明任何人正在获取网站内分析数据,并且该线程基于过时的 Google 脚本。

Google analytics.js and Content Security Policy> 上的帖子是针对应用程序,而不是网站,没有人报告获得网站内分析数据,即使使用最大允许的 CSP,我的努力也失败了。

解决方案在线程 Google analytics Universal code not tracking> 中,但解决方案仅限于将 CSP 设置为报告,而不是阻塞,这对我没有多大用处。

没有关于 CSP 和 AdSense 的 Stack Overflow 线程。当我建议 H5BP 在他们的模型 <.htaccess> 中告诉用户这一点时,他们的受访者说这对他有用,并将我推荐给你。

作为检查建议,是否有人在自己的 Google Analytics(分析)帐户中看到特定页面的数据并在运行 .htaccess CSP 时看到 AdSense 广告?

【问题讨论】:

实在不清楚具体是什么问题。 尝试将 CSP 写入 .htaccess,即使允许无限制,并且需要了解实际接收每页网站内部 Google Analytics 数据并在使用时实际出现 AdSense 广告的人的经验.htaccess CSP。 这并没有告诉我们您正在使用什么代码或什么是阻塞的。建议阅读:***.com/help/how-to-ask javascript 代码是过去几个月 Google 为 Analytics 和 AdSense 提供的脚本(不是旧版本),我尝试过的每个 CSP 变体都被阻止,包括 default-src 通配符。 是的,这是可能的。您尝试了哪些策略,当 Chrome 控制台被阻止时,它会显示什么错误消息?请提供具体的详细信息和错误消息,而不仅仅是您尝试了很多事情但没有奏效的漫谈。 Default-src 一切都很好,但如果你在之后指定了一个 script-arc,那么它将被忽略。 【参考方案1】:

使用下面的代码对我有用:

default-src 'self' googleads.g.doubleclick.net;
script-src 'self' 'unsafe-inline' data: pagead2.googlesyndication.com storage.googleapis.com googleads.g.doubleclick.net ajax.googleapis.com; 
img-src 'self' data: storage.googleapis.com pagead2.googlesyndication.com; 
style-src 'self' 'unsafe-inline'; 
font-src 'self' fonts.googleapis.com; frame-ancestors 'self'; object-src 'self'

【讨论】:

这对我帮助很大,因为我最近开始看到 Adsense 广告加载错误。我唯一没有包括的是任何 -src 条目上的 data: 选项,因为它是不安全的,并且在没有它的情况下,adsense 可以使用您指定的所有上述域:+1: 这不是一个可接受的解决方案。在script-src 中使用'unsafe-inline' 几乎否定了整个CSP 的使用。来源:blog.mozilla.org/security/2014/10/04/csp-for-the-web-we-have【参考方案2】:

或使用 report-uri 记录所有错误,以便将源添加到您的 CSP。

JSON 将 POST 到该 URL (https://example.com/csp/log.php)。

Content-Security-Policy: default-src 'self';
report-uri: https://example.com/csp/log.php;

【讨论】:

【参考方案3】:

没有。截至今天 [2016 年 9 月 8 日]。我们禁用了 CSP,因为 Google 框架源是特定于域的 -> frame-src : ... google.co.uk google.co.fr ...

【讨论】:

有一些谷歌域的列表(虽然,它可能是用于搜索,而不是 Adsense):google.com/supported_domain。 Google 域的工作链接google.com/supported_domains【参考方案4】:

Adsense

对于 Google Adsense,例如这个 CSP “有效”:

Content-Security-Policy: frame-ancestors 'self';

它可以防止您的页面被框起来,而不会限制您的页面可以执行的操作。因此它的 XSS 保护是不存在的。

但是 Adsense 脚本可以加载加载的内容,然后加载等。鉴于他们可以使用数千个(在撰写本文时:3103)第三方广告网络,根本没有合理或可行的方法我们永远知道他们都需要什么才能让广告发挥作用。因此,如果您想拥有 Adsense,那么限制您从哪里加载图片、flash、javascript 等是不会发生的。

一个或另一个:

任一 Adsense 限制性 CSP

但不是两者兼而有之。

分析

是另一回事,已经在其他回复中介绍过。 [不是用户]

CSP 政策

需要提醒许可 CSP 政策的潜在作者,例如https:* 不包括对 unsafe-inlinedata: 源的许可。我在网络上看到不少作者认为他们这样做的地方。

在编写政策时,最好先列出仅报告的政策。 标头被命名为“Content-Security-Policy-Report-Only”而不是“Content-Security-Policy”,它不会停止任何事情,只需将 json 中的报告部分发送到指定的目的地。见这里:https://developers.google.com/web/fundamentals/security/csp/#report-only

【讨论】:

这是明智的,去年 9 月 Google (@phani) 的回复与此一致。我宁愿谷歌直接告诉我们,因为这会为我作为一名网站设计师节省大量时间。这可能是他们禁用 CSP 的方法,在这种方法中,即使是完全允许的配置也是不可接受的,可能会影响每页分析和 AdSense。我没有看到任何人声称获得每页的 Google Analytics 数据并且在他们的网站上也有 CSP。因此,我不打算将 CSP 放回任何拥有 Google 产品的网站。谢谢。 我看到的主要问题是,需要提醒尝试编写许可 CSP 的人 * 不允许 unsafe-line 或 data: 。但是,如果您要允许一切,则最好不要为该类型的资源编写限制。上面的示例展示了如何使用 CSP 防止被“陷害”,同时不对加载的内容施加限制。【参考方案5】:

对于严格的 CSP 3 和随机数,我认为这是可能的,但我没有能力进行测试,因为我们不使用 AdSense。

1.) 将所有 javascript(GA、AdSense 等)放入 .js 文件中。没有内联 JS。

2.) 使用建议的“严格”CSP:https://csp.withgoogle.com/docs/strict-csp.html

3.) 像通常包含任何文件一样包含 .js 文件,但添加一个随机数:

<script src="/mygooganalytics.js" nonce="[your nonce here]"></script>

效果应该是允许源自 mygooganalytics.js 的任何内容。随机数通常由服务器端代码(php、ruby 等)创建,但如果这在您的应用程序之外/在常规的旧 html 文件中,您可以使用您的服务器生成随机数。如果你碰巧使用 Apache:Generate a nonce with Apache 2.4 (for a Content Security Policy header)

【讨论】:

有趣。在其他人有并报告之前,我犹豫是否要对此进行试验。 withgoogle 链接是 Google 自己的(这很好),最后一个常见问题解答暗示 Win 曝光(因此大多数用户)不受保护,而且 Google 仍未正式表示 CSP 和 AdSense/Analytics 将共存(除非可能实验作品)。如果有人使用其他广告供应商,尤其是动态广告,了解 CSP 是否与该供应商合作会有所帮助。 是的,我肯定会先小规模尝试一下。我们确实使用了在技术层面上可能与 AdSense 类似的东西,Intercom.io。在以前版本的 CSP 中,我们不得不将他们的大约 2 打 URL 列入白名单,包括他们内部使用的 SaaS(例如 wistia)。使用 CSP 3,我们只需要一个带有 nonce 的 intercom.js 文件。我不会链接到他们的网站,因为它最终会改变我敢肯定,但搜索“intercom csp”,他们有一个很好的页面“使用带有内容安全策略的对讲”描述 CSP 1 和 2 url 白名单与 CSP 3/随机数。

以上是关于内容安全政策能否与 Google Analytics 和 AdSense 兼容?的主要内容,如果未能解决你的问题,请参考以下文章

内容安全政策上的 Google 地图错误

Google analytics.js 和内容安全政策

添加内容安全策略与折叠css

Google Play 政策更新重点回顾 (上) | 2022 年 4 月

Google Play 政策更新重点回顾 (上) | 2022 年 4 月

我网站上的内容安全政策警告