Can Content Security Policy be made compatible with Google Analytics and AdSense?

一个人想着一个人 提交于 2019-11-27 22:26:13

No. As of today [8 Sep 16]. We disabled CSP as Google frame source was domain specific -> frame-src : … google.co.uk google.co.fr ...

Adsense

For Google adsense, e.g. this CSP "works":

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

It prevents your page being framed without putting limits on what your page can do. Hence its XSS protection is nonexistent.

But the Adsense scripts can be loading something that loads, which in turn loads etc. And given the thousands (at the time of writing: 3103 ) 3rd party advertising networks they can use, there simply is no reasonable nor practicable way for us to ever know what all of them could be needing for the ads to function. So to restrict where you're going to let images, flash, javascript etc. be loaded from if you want to have Adsense just is not going to happen.

One or the other:

  • either Adsense
  • either a restrictive CSP

But not both.

Analytics

is another matter, already covered in other replies. [not a user]

CSP policies

Potential authors of permissive CSP policies need to be reminded that e.g. https: and * do not include permission for unsafe-inline nor data: sources. I've seen quite a few places around the web where authors assume they do.

While writing policies it might be better to put a report-only one up first. The header is named "Content-Security-Policy-Report-Only" instead of "Content-Security-Policy" and it'll not stop anything, just do the reporting part in json to the specified destination. See here: https://developers.google.com/web/fundamentals/security/csp/#report-only

Oznog

Using below code works for me :

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'
Oznog

Or log all error with report-uri for add sources to your CSP.

JSON will POST to that URL (https://example.com/csp/log.php).

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

With strict CSP 3, and nonces, I think this is possible but I don't have the ability to test as we don't use AdSense.

1.) Put all javascript in (GA, AdSense, etc.) in .js files. No inline JS.

2.) Use the proposed "strict" CSP: https://csp.withgoogle.com/docs/strict-csp.html

3.) Include the .js files as you normally include any file, but add a nonce:

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

The effect should be that anything originating from mygooganalytics.js will be allowed. Nonces are generally created by server-side code (php, ruby, etc.), but if this is outside of your app/in a regular old html file you can generate a nonce using your server. If you happen to use Apache: Generate a nonce with Apache 2.4 (for a Content Security Policy header)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!