可以在哪里配置Content-Security-Policy?

时间:2017-11-28 15:49:54

标签: javascript php apache content-security-policy facebook-pixel

对于我在其网站上实施Facebook Pixel的客户,允许他们收集营销统计数据。 Facebook Pixel使用以下Javascript在<head>标记中实现:

<script>
  !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
    n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)}(window,
    document,'script',
    'https://connect.facebook.net/en_US/fbevents.js');
    fbq('init', '*****************');
    fbq('track', 'PageView');
</script>
<noscript>
  <img height="1" width="1" src="https://www.facebook.com/tr?id=***************&ev=PageView&noscript=1" />
</noscript>

如您所见,该脚本正在connect.facebook.net域上调用Javascript文件。当代码上传到Production服务器时,由于违反了Content-Security-Policy指令,我在Chrome控制台中收到以下错误:

Refused to load the script 'https://connect.facebook.net/en_US/fbevents.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval' platform.twitter.com s3.amazonaws.com cdn.ckeditor.com cdn.syndication.twimg.com www.google-analytics.com ajax.googleapis.com player.vimeo.com".

我已经浏览了网站的源代码(用PHP构建),Content-Security-Policy指令在那里的任何地方都没有配置。它也不在.htaccess文件中。虽然我不太确定,如果可以.htaccess文件中完成。

修改(添加了响应标头图片) Response headers

如错误消息以及上面的屏幕截图所示,在某处定义的Content-Security-Policy指令,我需要找到它,所以我可以将Facebook域列入白名单。我想,这可能是在我无法访问的httpd.conf文件中的服务器级别上完成的,因为该网站由外部托管服务提供商托管。

所以我的问题是:哪里可以配置Content-Security-Policy指令,如果不是在PHP代码,html <meta http-equiv>属性或httpd.conf文件中?这可以在其他地方完成吗?

1 个答案:

答案 0 :(得分:0)

据我所知,这些是可以设置内容安全策略的唯一地方:

  1. 元标记(不是您示例中的情况,因为它是标题)
  2. Apache配置,ether apache2.conf / httpd.conf或连接到主文件的其中一个vhost / config文件。如果可以,请检查可用的站点
  3. .htaccess,如果您无法直接访问apache配置,我猜这就是这种情况。
  4. PHP的header()函数,如果正在手动创建标题。