要使用Google AdWords转换跟踪,还需要使用Content-Security-Policy标头的img-src
指令中的哪些域/协议?
从测试开始,当我们调用google_trackConversion
时,浏览器会创建一个带有src的图像,该图像跟随各个域之间的302重定向链...
www.googleadservices.com ->
googleads.g.doubleclick.net ->
www.google.com ->
www.google.co.uk
最终的.co.uk
看起来很可疑。在我们从英国进行测试时,我们担心来自其他国家的跟踪会重定向到其他域。
为了跟踪工作,我们需要打开的完整域名列表是什么?
根据评论中的要求,第一个请求的示例路径组件是:
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.但是,我显然没有尝试从每个国家/地区连接,所以我原来的问题就是。
答案 0 :(得分:13)
不幸的是,解决这个问题的方法并不多。当CSP处于活动状态时,资源需要白名单(在远程资源的情况下,如此)或内联技巧(即nonce
或sha256-...
)。但是,在一天结束时,CSP仍然可以使您的网站更安全并保护大多数资源。
但是,根据您的目的,您仍然可以实现目标。
以下是一些选项:
将所有图片列入白名单。
当然,您可以在"*"
指令中放置img-src
,但我想您已经知道并且选择不这样做,因为它会破坏CSP对图像的保护。
通过其他方式加载图片。
如果你所追求的只是专门锁定图像,并且,例如,对XMLHttpRequest
不太在意,你可以通过POST
或甚至通过<script>
加载像素标记为自定义type
(使用AdWords image tag跟踪方法)。这利用了以下事实:Google只需要浏览器来完成HTTP请求/响应(和重定向)周期以进行分析,而您并不真正关心解析或执行生成的内容,无论如何都是1x1透明像素。这样您就可以锁定img-src
指令(如果这确实是您的目标),同时仍然允许Google希望用于重定向的任何域名。
我知道这只能解决您的问题,但如果您的主要威胁是恶意图片,那么它很有用。
将所有Google域名放在img-src
。
如下所示。标题长度将成为一个问题(即使规范说你很好,实现者并不总是那么慷慨),更重要的是,当Google更改域名列表时,你可能会遇到虚假的失败,当然不是一个公开的或容易引起注意的行为(除了你的广告转换没有通过!)。由于我认为你的工作不是不断更新该列表,你可能不想使用这个选项。
报告几个月的失败,然后随之滚动。
由于CSP支持报告URI和Content-Security-Policy-Report-Only
变体,因此您可以在仅报告模式下将其推出并等待报告进入。如果您已经拥有关于您的用户群的良好数据(并且它没有改变很多),这可能是一个很好的选择 - 一旦你看到这些报告稳定在域名列表中,请将其密封在常规CSP标题中。 (可选)您可以在最终标头上放置报告URI以捕获任何其他故障。当然,这种策略的缺点是,在仅报表模式下,您无法获得保护,当您切换到强制执行时,失败会导致转换数据丢失,并且您正在追赶。
具有反向代理的静态像素
好。好吧,由于上述选项并不那么好(我承认),现在是时候开箱即用了。这里的问题是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之间放置代理也可以强制重写重定向。
为了简化代理设置(并添加一些性能调整),您可以选择Fastly与Origin Shielding之类的内容,而不是自己构建它。如果您从那里添加DoubleClick后端和代理,则可以将来自CDN的原始请求固定为仅来自某个地理区域。无论哪种方式,您的用户都应该看到一组稳定的重定向,您可以将该域名列表减少到img-src 'self' *.google.com *.doubleclick.net *.googleadservices.net
。
编辑:同样值得注意的是Fastly(和growing list of other CDN providers)peer directly with Google Cloud在他们的几个存在点,为Google提供优化的路径代理流量的网络。
答案 1 :(得分:11)
你想通过锁定你的img-src来实现什么目标?
CSP是一个很好的安全选项,但大多数问题都是javascript(可能导致各种问题),css(可用于隐藏或覆盖带有注入内容的元素)或框架选项(可用于单击) - 通过类似的覆盖内容劫持)。图像风险小得多恕我直言。
加载图片时我可以想到的安全风险很少,可归结为:
跟踪及其隐私影响。虽然您已经在使用跟踪这么多内容的Google Adwords了。关心这一点的人通常会在浏览器中阻止它。
加载不安全的内容(我认为你是专门使用HTTPS,或者这整个对话有点无意义?)。对于img-src,可以使用更加宽松的CSP策略来解决这个问题。
加载图片,然后使用该恶意图片覆盖您网站的部分内容。但这也需要javascript和/或CSS注入 - 这应该在CSP中锁定。
最终,除非您有XSS漏洞,否则人们无法轻松将图片加载到您的网页中。即使他们可以认为风险很小。
所以,我很想有一个&#34; img-src&#39; self&#39; HTTPS:;&#34;而不是尝试其他人提出的任何其他工作 - 所有这些都有缺点,并且不是很有前途的证据。
最终,如果您担心网站的安全性,锁定图片是一项高优先级,我会质疑您是否应该运行 Google Adwords 。
但是,如果您遇到特定威胁,同时仍然允许使用 Adwords ,那么请提供详细信息,并且可能还有其他方法可以解决这个问题。目前,您已经要求解决特定问题的解决方案,而不必解释实际的潜在问题,这些问题可能与您提出的解决方案不同。
答案 2 :(得分:5)
您可以使用维基百科的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询问。