随着 MySSL 企业版的开发进度的推进,我们最近上线了 HTTPS 外链监控的功能。下面是该功能相关使用说明。

进入 MySSL 企业版:
csp-01

你会获取到类似:https://2d89e693d66a49d6993df623e272311f.myssl-uri.com/api/csp-report 类似的 URL。这是我们为你分配的专属不安全外链的上报地址。

你拿到该地址需要做的是,将该地址添加到服务器的 header 处。

配置规则

在添加之前,你需要了解内容安全策略的配置规则:

  • Content-Security-Policy:内容安全策略,当网站加载的内容违背了该策略,浏览器将会阻止该资源的加载,并上报。
  • Content-Security-Policy-Report-Only:内容安全策略仅报告,网站加载的资源违背了该策略仍然会被加载,并上报。

一般来说,你不知道自己添加的策略有什么问题,建议你先通过配置 Content-Security-Policy-Report-Only,然后在 MySSL EE 上查看相关报告之后并改正,最后改为 Content-Security-Policy

常用配置项的说明:

  • style-src:指定样式表的加载来源。如 style-src https: 'unsafe-inline'
  • img-src:指定图片的来源。如 img-src https: data: https://xx.xxx.co
  • font-src:指定可提供网页字体的来源。如 font-src https://themes.googleusercontent.com
  • child-src:用于列出适用于工作线程和嵌入的帧内容的网址。如 child-src https://youtube.com
  • connect-src:用于限制可(通过 XHR、WebSockets 和 EventSource)连接的来源。
  • media-src:用于限制允许传输视频和音频的来源。
  • object-src:可对 Flash 和其他插件进行控制。
  • default-src:默认策略,当你没有配置上面的内容策略时,默认使用。
  • report-uri:用于指定在违反内容安全政策时浏览器向其发送报告的网址。
  • base-uri:用于限制可在页面的 <base> 元素中显示的网址。
  • upgrade-insecure-requests:指示 User Agent 将 HTTP 更改为 HTTPS,重写网址架构。 该指令适用于具有大量旧网址(需要重写)的网站,慎用。

一般来说,以 -src 结尾的都适用于 default-src,即在没有指定 xx-src 的情况下将默认使用 default-src

例:

Content-Security-Policy-Report-Only "default-src https://example.com; font-src https://st.example.com"

这个策略,font-src 只能加载 https://st.example.com 的字体资源,不能加载 https://example.com 的字体资源。其它没有指定的均使用 default-src

那么,以 xx-src 的内容可以填什么呢,一般可以填写:

  • 'none':不执行任何匹配。
  • 'unsafe':与当前来源(而不是其子域)匹配。
  • 'unsafe-inline':允许使用内联 JavaScript 和 CSS。
  • 'unsafe-eval':允许使用类似 eval 的 text-to-JavaScript 机制。
  • https::以 https: 开头的。
  • data::以 data: 开头的。
  • blob::以 blob 开头的。
  • 网址:直接指定网址。

这里列举 Nginx 和 Apache 相关例子,在添加该 header 之前请详细了解 Content-Security-Policy-Report-Only 的作用:

1、Nginx 如何配置

add_header Content-Security-Policy-Report-Only "default-src https: data: 'unsafe-inline' 'unsafe-eval' wss:; report-uri https://2d89e693d66a49d6993df623e272311f.myssl-uri.com/api/csp-report";

2、 Apache 如何配置

Header add Content-Security-Policy-Report-Only "default-src https: data: 'unsafe-inline' 'unsafe-eval' wss:; report-uri https://2d89e693d66a49d6993df623e272311f.myssl-uri.com/api/csp-report"

当 MySSL 企业版获取到上报的外链时,你会看到这样的画面:
Jietu20180703-174156

如果你想了解更多有关内容安全响应头: