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