Google Adwords CSP(内容安全政策)img-src

Mic*_*mza 26 javascript http google-adwords content-security-policy

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
Run Code Online (Sandbox Code Playgroud)

决赛.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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

sga*_*mon 14

不幸的是,解决这个问题的方法并不多.资源需要白名单(在远程资源的情况下,如此)或内联技巧(即noncesha256-...)CSP处于活动状态时.但是,在一天结束时,CSP仍然可以使您的网站更安全并保护大多数资源.

但是,根据您的目的,您仍然可以实现目标.

以下是一些选项:

  1. 将所有图像列入白名单.

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

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

    如果你所追求的只是专门锁定图像,并且比如说不太在乎XMLHttpRequest,你可以通过自定义加载像素,POST甚至通过<script>带有自定义的标记加载像素type(使用AdWords图像标记跟踪方法).这利用了以下事实:Google只需要浏览器来完成HTTP请求/响应(和重定向)周期以进行分析,而您并不真正关心解析或执行生成的内容,无论如何都是1x1透明像素.这允许您锁定您的img-src指令(如果这确实是您的目标),同时仍然允许Google想要用于重定向的任何域.

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

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

    如下所示.标题长度是一个问题(即使规范说你很好,实现者并不总是那么慷慨),更重要的是,当谷歌改变他们的域名列表时,你可能会遇到虚假的失败,这当然不是公众或容易明显的行动(除了您的广告转换没有通过!).由于我认为你的工作不是不断更新该列表,你可能不想使用这个选项.

  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
Run Code Online (Sandbox Code Playgroud)

使用静态像素(如方法#2)并在美国或英国放置代理应该确保源IP在地理位置固定在那里,并且Google的任播前端应该将您引导到稳定的端点.如果您愿意,在用户和Google之间放置代理也可以强制重写重定向.

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

编辑:值得注意的是,Fastly(以及越来越多的其他CDN提供商)在他们的几个存在点直接与Google Cloud对等,为您的代理流量提供了进入Google网络的优化路径.

  • 我会避免选项2.你需要放松你的`connect-src`或`form-src`指令,这些指令的含义比放宽的`img-src`指令要大得多. (3认同)
  • 一般来说,你可能是对的,@ Polynomial,但是,在儿童网站上,或许图像会成为你的主要关注点?谁知道他的用例是什么.我的目标只是帮助:) (2认同)

Bar*_*ard 11

你想通过锁定你的img-src来实现什么?

CSP是一个很好的安全选项,但大多数问题都是javascript(可能导致各种问题),css(可用于隐藏或覆盖带注入内容的元素)或框架选项(可用于点击顶进)同样覆盖内容).恕我直言,图像的风险要小得多.

加载图像时我可以想到的安全风险很少,可归结为:

  1. 跟踪及其隐私影响.虽然您已经在使用跟踪这么多内容的Google Adwords了.关心这一点的人通常会在浏览器中阻止它.

  2. 加载不安全的内容(我假设您只使用HTTPS或整个会话有点无意义?).对于img-src,只需https的松散CSP策略就可以解决这个问题.

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

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

所以,我很想有一个"img-src'self'https:;" 而不是尝试其他人提出的任何其他工作 - 所有这些都有缺点,并不是很有前途的证明.

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

但是,如果您遇到特定的威胁,同时仍然允许使用Adwords,那么请提供详细信息,并且可能还有其他方法.目前,您已经要求解决特定问题,而无需解释实际的潜在问题,这些问题可能与您提出的解决方案不同.

  • 我只想提一下,这个答案忽略了安全风险。通过开放的 image-src,攻击者可以提取密码、API 密钥、信用卡信息等内容。那么这如何成为一个问题呢?除了 XSS 漏洞之外,答案还提到如果您使用的依赖项是恶意的,也可能会发生这种情况。 (3认同)

Mic*_*ski 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

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