CSP设置upgrade-insecure-requests

好在 W3C 工作组考虑到了我们升级 HTTPS 的艰难,在 2015 年 4
月份就出了一个 Upgrade Insecure Requests 的草案,他的作用就是让浏览器自动升级请求。

在我们服务器的响应头中加入:

header(“Content-Security-Policy: upgrade-insecure-requests”);

1
header("Content-Security-Policy: upgrade-insecure-requests");

我们的页面是 https 的,而这个页面中包含了大量的 http
资源(图片、iframe等),页面一旦发现存在上述响应头,会在加载 http
资源时自动替换成 https 请求。可以查看 google
提供的一个 demo

威尼斯人线上娱乐 1

不过让人不解的是,这个资源发出了两次请求,猜测是浏览器实现的 bug:

威尼斯人线上娱乐 2

当然,如果我们不方便在服务器/Nginx
上操作,也可以在页面中加入 meta 头:

XHTML

<meta http-equiv=”Content-Security-Policy”
content=”upgrade-insecure-requests” />

1
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />

目前支持这个设置的还只有 chrome 43.0,不过我相信,CSP 将成为未来 web
前端安全大力关注和使用的内容。而 upgrade-insecure-requests 草案也会很快进入
RFC 模式。

从 W3C
工作组给出的 example,可以看出,这个设置不会对外域的
a 链接做处理,所以可以放心使用。

1 赞 收藏
评论

威尼斯人线上娱乐 3

暴露 URL (HTTPS > HTTP Sites)

Referrer
信息被广泛用于网络访问流量来源分析,它是众多网站数据统计服务的基础,例如
Google Analytics
AWStats,基于Perl的开源日志分析工具。同样的这一特性也会很容易被恶意利用,造成用户敏感信息泄漏,例如将用户
SESSION ID 放在 URL 中,第三方拿到就可能看到别人登录后的页面内容。2014
年,W3C 发布了 Referrer Policy 的新草案,开发者开始有权控制自己网站的
Referrer Policy。但是仅有 Chrome/Firefox
浏览器较新的版本的能够提供支持。

Feature Chrome Firefox Edge、Internet Explorer、 Opera、Safari
Basic Support 56.0 50.0 (No)
same-origin (No)1 52.0 (No)
strict-origin (No)1 52.0 (No)
strict-origin-when-cross-origin (No)1 52.0 (No)

Referrer-Policy选项列表:

  • Referrer-Policy: no-referrer //整个 Referer
    首部会被移除。访问来源信息不随着请求一起发送。
  • Referrer-Policy: no-referrer-when-downgrade //默认选项
    //引用页面的地址会被发送(HTTPS->HTTPS),降级的情况不会被发送
    (HTTPS->HTTP)
  • Referrer-Policy: origin //在任何情况下,仅发送文件的源作为引用地址
  • Referrer-Policy: origin-when-cross-origin
    //对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源
  • Referrer-Policy: same-origin
    //对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
  • Referrer-Policy: strict-origin
    //在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS)
  • Referrer-Policy: strict-origin-when-cross-origin
    //对于同源的请求,会发送完整的URL作为引用地址
  • Referrer-Policy: unsafe-url //无论是否同源请求,都发送完整的
    URL(移除参数信息之后)作为引用地址。

我们必须确保用户从全 HTTPS 站点跳转到 HTTP
站点的时候,没有中间人可以嗅探出用户实际的 HTTPS URL,Referrer Policy
设置如下:

//HAProxy
http-response set-header Referrer-Policy no-referrer-when-downgrade
//Nginx
add_header Referrer-Policy: no-referrer-when-downgrade
Source Destination Referrer (Policy :no-referrer-when-downgrade)
https://test.com/blog1/ http://test.com/blog2/ NULL
https://test.com/blog1/ https://test.com/blog2/ https://test.com/blog1/
http://test.com/blog1/ http://test.com/blog2/ http://test.com/blog1/
http://test.com/blog1/ http://example.com http://test.com/blog1/
http://test.com/blog1/ https://example.com http://test.com/blog1/
https://test.com/blog1/ http://example.com NULL

让浏览器不再显示 https 页面中的 http 请求警报

威尼斯人线上娱乐,2015/08/26 · 基础技术 ·
HTTPS,
浏览器

原文出处:
李靖(@Barret李靖)   

HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 HTTP 通道,所以在
HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错:

Mixed Content: The page at ‘https://www.taobao.com/‘ was loaded over
HTTPS, but requested an insecure image ‘http://g.alicdn.com/s.gif’.
This content should also be served over HTTPS.

HTTPS改造之后,我们可以在很多页面中看到如下警报:

威尼斯人线上娱乐 4

很多运营对 https 没有技术概念,在填入的数据中不免出现 http
的资源,体系庞大,出现疏忽和漏洞也是不可避免的。

Content-Security-Policy

内容安全性政策(Content Security
Policy,CSP)就是一种白名单制度,明确告诉客户端哪些外部资源(脚本/图片/音视频等)可以加载和执行。浏览器可以拒绝任何不来自预定义位置的任何内容,从而防止外部注入的脚本和其他此类恶意内容。设置
Content-Security-Policy Header:

//HAProxy:
http-response set-header Content-Security-Policy:script-src https://www.google-analytics.com;https://q.quora.com
//Nginx
add_header Content-Security-Policy-Report-Only "script-src https://www.google-analytics.com https://q.quora.com";

点击劫持(Clickjacking)

点击劫持,clickjacking
是一种在网页中将恶意代码等隐藏在看似无害的内容(如按钮)之下,并诱使用户点击的手段,又被称为界面伪装(UI
redressing)。例如用户收到一封包含一段视频的电子邮件,但其中的“播放”按钮并不会真正播放视频,而是被诱骗进入一个购物网站。

威尼斯人线上娱乐 5

针对点击劫持攻击,开放Web应用程序安全项目(Open Web Application Security
Project
,OWASP)
(非营利组织,其目的是协助个人、企业和机构来发现和使用可信赖软件)
提供了一份指引,《Defending_with_X-Frame-Options_Response_Headers》

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 frame
标签 或者 object
标签中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持
(clickjacking) 的攻击。DENY:表示该页面不允许在 frame
中展示,即便是在相同域名的页面中嵌套也不允许。SAMEORIGIN:表示该页面可以在相同域名页面的
frame 中展示。ALLOW-FROM uri:表示该页面可以在指定来源的 frame
中展示。配置如下:

//HAProxy
http-response set-header X-Frame-Options:DENY
//Nginx
add_header X-Frame-Options "DENY";
//Java
response.addHeader("x-frame-options","DENY");

X-XSS-Protection

HTTP X-XSS-Protection 响应头是Internet
Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击
(XSS)时,浏览器将停止加载页面。配置选项:0 禁止XSS过滤。1
启用XSS过滤(通常浏览器是默认的)。
如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。mode=block
启用XSS过滤,
如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。report=reporting-URI
启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用 CSP
report-uri 指令的功能发送违规报告。参考文章《The misunderstood
X-XSS-Protection》
:

//HAProxy
http-response set-header X-XSS-Protection: 1;mode=block
//Nginx
add_header X-Xss-Protection "1; mode=block" always;;

浏览器支持情况:

Chrome Edge Firefox Internet Explorer Opera Safari
(Yes) (Yes) No 8.0 (Yes) (Yes)

SSL Strip Man-in-The-Middle Attack

中间人攻击中攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。例如,在一个未加密的Wi-Fi
无线接入点的接受范围内的中间人攻击者,可以将自己作为一个中间人插入这个网络。强制用户使用HTTP严格传输安全(HTTP
Strict Transport
Security,HSTS)
。 HSTS 是一套由
IETF
发布的互联网安全策略机制。Chrome 和 Firefox 浏览器有一个内置的 HSTS
的主机列表,网站可以选择使用 HSTS 策略强制浏览器使用 HTTPS
协议与网站进行通信,以减少会话劫持风险。

威尼斯人线上娱乐 6

服务器设置下列选项可以强制所有客户端只能通过 HTTPS 连接:

//HAProxy
http-response set-header Strict-Transport-Security max-age=31536000;includeSubDomains;preload
//Nginx
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload; always;'