【问题标题】:Google Adwords CSP (content security policy) img-srcGoogle Adwords CSP(内容安全策略)img-src
【发布时间】:2016-03-25 12:04:21
【问题描述】:

Content-Security-Policy 标头的 img-src 指令中的哪些域/协议需要允许 Google AdWords 转化跟踪?

从测试来看,当我们调用google_trackConversion 时,看起来浏览器会创建一个带有 src 的图像,该图像遵循不同域之间的 302 重定向链......

www.googleadservices.com ->
googleads.g.doubleclick.net ->
www.google.com ->
www.google.co.uk

最后的.co.uk 在我看来很可疑。由于我们在英国进行测试,因此我们担心从其他国家/地区调用的跟踪会重定向到其他域。

我们需要打开哪些域的完整列表才能使跟踪正常工作?


根据 cmets 中的请求,第一个请求的示例路径组件是:

pagead/conversion/979383382/?random=1452934690748&cv=8&fst=1452934690748&num=1&fmt=3&label=jvoMCNP4umIQ1uiA0wM&guid=ON&u_h=1080&u_w=1920&u_ah=1033&u_aw=1920&u_cd=24&u_his=18&u_tz=0&u_java=false&u_nplug=5&u_nmime=7&frm=0&url=https%3A//beta.captevate.com/payment%3Flevel%3Da00&async=1

并重复第二次转换,第一个请求的路径组件是

pagead/conversion/979383382/?random=1452934959209&cv=8&fst=1452934959209&num=1&fmt=3&label=jvoMCNP4umIQ1uiA0wM&guid=ON&u_h=1080&u_w=1920&u_ah=1033&u_aw=1920&u_cd=24&u_his=26&u_tz=0&u_java=false&u_nplug=5&u_nmime=7&frm=0&url=https%3A//beta.captevate.com/payment%3Flevel%3Da00&async=1

我使用免费的 VPN 服务从几个国家(荷兰和新加坡)连接,最后一次重定向没有发生:对www.google.com 的最终请求是 200。但是,我显然没有尝试过从每个国家/地区连接,所以我最初的问题是。

【问题讨论】:

  • 您介意发布原始跟踪图像的路径组件吗?或者 Google 是否会以不可预知的方式改变这一点,可能会与域一起改变?
  • 您是否尝试过使用某种 VPN 或代理来获取外国 ip 并检查您的怀疑?也许你会被重定向到 .co.uk 域。
  • @sgammon 我已经添加了原始请求的路径组件
  • @Phonolog 是的,并在问题中添加了详细信息。

标签: javascript http google-ads-api content-security-policy


【解决方案1】:

不幸的是,解决这个问题的方法并不多。当 CSP 处于活动状态时,资源需要白名单(在远程资源的情况下,例如这个)或内联技巧(即 noncesha256-...)。不过,归根结底,CSP 可能仍然可以让您的网站更安全并保护大部分资源。

不过,根据您的目标,您可能仍然能够实现目标。

以下是一些选项:

  1. 将所有图片列入白名单。

    当然,您可以简单地在您的 img-src 指令中放置一个 "*",但我想您已经知道这一点并且选择不这样做,因为它破坏了 CSP 对图像的保护。

  2. 通过其他方式加载图像。

    如果您只是专门锁定图像,并且不太关心XMLHttpRequest,您可以通过POST 甚至通过带有自定义@ 的<script> 标签加载像素987654334@(使用AdWords image tag跟踪方法)。这利用了这样一个事实,即 Google 只需要浏览器完成 HTTP 请求/响应(和重定向)循环以用于分析目的,并且您并不真正关心解析或执行结果内容,这是一个 1x1 透明像素.这允许您锁定您的 img-src 指令(如果这确实是您的目标),同时仍然允许 Google 想要使用任何域进行重定向。

    我知道这只会解决您的问题,但如果您的主要威胁是恶意图像,它会很有用。

  3. 将所有 Google 域放入您的 img-src

    如下所示。标头长度成为一个问题(即使规范说你很好,但实施者并不总是那么慷慨),更重要的是,当 Google 更改他们的域列表时,你可能会遇到虚假失败,这当然不是公开的或容易引起注意的行为(除了您的广告转化没有通过!)。由于我认为您的工作不是不断更新该列表,因此您可能不想选择此选项。

  4. 报告失败几个月,然后继续。

    由于 CSP 支持报告 URI 和 Content-Security-Policy-Report-Only 变体,因此您可以在仅报告模式下推出它并等待报告进入。如果您已经掌握了有关用户群的良好数据(并且变化不大),这可能是一个不错的选择 - 一旦您看到这些报告稳定在域列表中,将其密封在常规 CSP 标头中。或者,您可以在最终标头上放置一个报告 URI,以捕获任何其他故障。当然,这种策略的缺点是您在仅报告模式下无法获得保护,当您切换到强制执行时,失败会导致转换数据丢失,而您正在迎头赶上。

  5. 带反向代理的静态像素

    好的。好吧,由于上述选项不是那么好(我承认),是时候跳出框框思考了。这里的问题是 Google 应用的 HTTP 优化技术(分片/地理固定域)与良好的安全实践(即 CSP)不一致。域歧义的根本原因是客户的地理位置,那么为什么不自己固定呢?

假设您对自己的 HTTP 服务器具有高级控制权,您可以使用静态像素方法自行跟踪和代理请求,如下所示:

User ---> GET http://your-page/

User <--- <html>...
          pixel: http://your-page/pixel?some=params

User ---> http://your-page/pixel?some=params
          ---> fetch http://googleads.g.doubleclick.net/pagead/viewthroughconversion/12345/?some=params
          <--- redirect to http://google.com, or http://google.co.uk
User <--- return redirect

使用static pixel(类似于方法#2)并将您的代理放置在美国或英国应该确保源IP 在地理上固定在那里,并且Google 的任播前端应该将您路由到一个稳定的端点。如果您愿意,在用户和 Google 之间放置一个代理还可以让您有机会强制重写重定向。

为了简化代理设置(并增加一些性能),您可以选择 FastlyOrigin Shielding 之类的东西,而不是自己构建它。如果您从那里添加 DoubleClick 后端和代理,您可以将来自 CDN 的原始请求固定为仅来自某个地理区域。无论哪种方式,您的用户都应该看到一组稳定的重定向,并且您可以将该 Google 域列表缩减为仅 img-src 'self' *.google.com *.doubleclick.net *.googleadservices.net

编辑: 还值得注意的是,Fastly(和 growing list of other CDN providerspeer directly with Google Cloud 在他们的一些入网点上为您的代理提供了进入 Google 网络的优化路径交通。

【讨论】:

  • 我会避免选项 2。您需要放松 connect-srcform-src 指令,这些指令的含义远大于放松的 img-src 指令。
  • 一般来说你可能是对的,@Polynomial,但是,在儿童网站上,图片可能是你主要关心的问题?谁知道他的用例是什么。我的目标只是提供帮助:)
【解决方案2】:

你想通过锁定你的 img-src 来达到什么目的?

CSP 是一个很好的安全选项,但大多数问题都与 javascript(可能导致各种问题)、css(可用于隐藏或覆盖带有注入内容的元素)或框架选项(可用于点击-通过类似的覆盖内容进行劫持)。图片的风险要小得多,恕我直言。

加载图片时我能想到的安全风险很少,归结为:

  1. 跟踪及其对隐私的影响。尽管您已经在使用跟踪如此多的 Google Adwords。而那些关心这个的人通常会在他们的浏览器中阻止它。

  2. 加载不安全的内容(我假设您只使用 HTTPS 或者整个对话有点毫无意义?)。这可以通过更宽松的 CSP 策略(仅针对 img-src 的 https)来解决。

  3. 加载图像并随后使用该恶意图像覆盖您网站的一部分。但这也需要 javascript 和/或 CSS 注入 - 应该在 CSP 中锁定。

最终,除非您有 XSS 漏洞,否则人们不应该能够轻松地将图像加载到您的页面中。即使他们可以,我认为风险很小。

所以,我很想只拥有一个“img-src 'self' https:;”而不是尝试其他人建议的任何其他解决方法 - 所有这些都有缺点并且不是很有未来的证明。

如果您最终担心您的网站的安全性,锁定图像是一个高优先级,我会质疑您是否应该运行 Google Adwords

但是,如果您尝试防御特定威胁,同时仍允许 Adwords,那么请提供该威胁的详细信息,并且可能有其他方法可以绕过它。目前,您要求解决特定问题,但不一定要解释实际的潜在问题,可能有与您所询问的解决方案不同的解决方案。

【讨论】:

  • 我只想提一下,这个答案错过了安全风险。使用开放的 image-src,攻击者可以提取密码、api 密钥、信用卡信息等内容。那么这如何成为问题呢?除了 XSS 漏洞之外,答案还提到如果您使用的依赖项是恶意的,它也可能发生。
【解决方案3】:

您可以使用维基百科的List of Google domains。有很多域与 Google Adwords 无关,但我不认为允许使用像 youtube.com 这样的域会导致问题。

目前的名单是:

google.com
google.ac
google.ad
google.ae
google.com.af
google.com.ag
google.com.ai
google.al
google.am
google.co.ao
google.com.ar
google.as
google.at
google.com.au
google.az
google.ba
google.com.bd
google.be
google.bf
google.bg
google.com.bh
google.bi
google.bj
google.com.bn
google.com.bo
google.com.br
google.bs
google.bt
google.co.bw
google.by
google.com.bz
google.ca
google.com.kh
google.cc
google.cd
google.cf
google.cat
google.cg
google.ch
google.ci
google.co.ck
google.cl
google.cm
google.cn
g.cn
google.com.co
google.co.cr
google.com.cu
google.cv
google.com.cy
google.cz
google.de
google.dj
google.dk
google.dm
google.com.do
google.dz
google.com.ec
google.ee
google.com.eg
google.es
google.com.et
google.fi
google.com.fj
google.fm
google.fr
google.ga
google.ge
google.gf
google.gg
google.com.gh
google.com.gi
google.gl
google.gm
google.gp
google.gr
google.com.gt
google.gy
google.com.hk
google.hn
google.hr
google.ht
google.hu
google.co.id
google.iq
google.ie
google.co.il
google.im
google.co.in
google.io
google.is
google.it
google.je
google.com.jm
google.jo
google.co.jp
google.co.ke
google.ki
google.kg
google.co.kr
google.com.kw
google.kz
google.la
google.com.lb
google.com.lc
google.li
google.lk
google.co.ls
google.lt
google.lu
google.lv
google.com.ly
google.co.ma
google.md
google.me
google.mg
google.mk
google.ml
google.com.mm
google.mn
google.ms
google.com.mt
google.mu
google.mv
google.mw
google.com.mx
google.com.my
google.co.mz
google.com.na
google.ne
google.com.nf
google.com.ng
google.com.ni
google.nl
google.no
google.com.np
google.nr
google.nu
google.co.nz
google.com.om
google.com.pk
google.com.pa
google.com.pe
google.com.ph
google.pl
google.com.pg
google.pn
google.co.pn
google.com.pr
google.ps
google.pt
google.com.py
google.com.qa
google.ro
google.rs
google.ru
google.rw
google.com.sa
google.com.sb
google.sc
google.se
google.com.sg
google.sh
google.si
google.sk
google.com.sl
google.sn
google.sm
google.so
google.st
google.sr
google.com.sv
google.td
google.tg
google.co.th
google.com.tj
google.tk
google.tl
google.tm
google.to
google.tn
google.com.tr
google.tt
google.com.tw
google.co.tz
google.com.ua
google.co.ug
google.co.uk
google.com
google.com.uy
google.co.uz
google.com.vc
google.co.ve
google.vg
google.co.vi
google.com.vn
google.vu
google.ws
google.co.za
google.co.zm
google.co.zw
admob.com
adsense.com
adwords.com
android.com
blogger.com
blogspot.com
chromium.org
chrome.com
chromebook.com
cobrasearch.com
googlemember.com
googlemembers.com
com.google
feedburner.com
doubleclick.com
igoogle.com
foofle.com
froogle.com
googleanalytics.com
google-analytics.com
googlecode.com
googlesource.com
googledrive.com
googlearth.com
googleearth.com
googlemaps.com
googlepagecreator.com
googlescholar.com
gmail.com
googlemail.com
keyhole.com
madewithcode.com
panoramio.com
picasa.com
sketchup.com
urchin.com
waze.com
youtube.com
youtu.be
yt.be
ytimg.com
youtubeeducation.com
youtube-nocookie.com
like.com
google.org
google.net
466453.com
gooogle.com
gogle.com
ggoogle.com
gogole.com
goolge.com
googel.com
duck.com
googlee.com
googil.com
googlr.com
googl.com
gmodules.com
googleadservices.com
googleapps.com
googleapis.com
goo.gl
googlebot.com
googlecommerce.com
googlesyndication.com
g.co
whatbrowser.org
localhost.com
withgoogle.com
ggpht.com
youtubegaming.com

但是,如果您想确定这是否真的是所有域,您应该直接询问 Google。

【讨论】:

  • 这样做是否会超出 CSP 标头长度的限制?
  • @MichalCharemza HTTP 标头长度没有任何限制,请参阅:stackoverflow.com/questions/686217/…
  • 它不涵盖像 gstatic.com 这样的大量域
猜你喜欢
  • 2017-03-14
  • 2021-12-26
  • 2020-04-08
  • 1970-01-01
  • 2023-01-07
  • 2018-08-14
  • 1970-01-01
  • 2013-10-09
  • 2015-07-28
相关资源
最近更新 更多