至于启用,页面中的

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

2015/08/26 · 基本功技术 ·
HTTPS,
浏览器

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

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

Mixed Content: The page at ‘‘ was loaded over
HTTPS, but requested an insecure image ‘’.
This content should also be served over HTTPS.

HTTPS改造之后,我们得以在众多页面中观察如下警报:

亚洲必赢官网 1

诸多运营对 https 没有技术概念,在填写的数额中难免出现 http
的资源,种类庞大,出现疏忽和漏洞也是不可翻盘的。

摘要

眼下有过多的恶心攻击都是以网站及其用户作为靶子,本文将简单介绍在 Web
服务器一侧的安全加固和测试方法。

攻击方式 防护方式 说明
点击劫持(clickjacking) X-Frame-Options Header —–
基于 SSL 的中间人攻击(SSL Man-in-the-middle) HTTP Strict Transport Security —–
跨站脚本(Cross-site scripting,XSS) X-XSS-Protection、Content-Security-Policy、X-Content-Type-Options —–

至于启用 HTTPS 的一部分经验分享

2015/12/04 · 基础技术 ·
HTTP,
HTTPS

初稿出处:
imququ(@屈光宇)   

乘势国内网络环境的随处恶化,种种篡改和绑架见惯不惊,越来越多的网站精选了全站
HTTPS。就在明天,免费提供证件服务的 Let’s
Encrypt 项目也正式开放,HTTPS 很快就会变成
WEB 必选项。HTTPS 通过 TLS
层和证件机制提供了情节加密、身份表明和数据完整性三大效率,可以使得防备数据被翻动或篡改,以及幸免中间人作伪。本文分享部分启用
HTTPS 进程中的经验,重点是什么与部分新出的安全规范合作使用。至于 HTTPS
的配备及优化,以前写过不少,本文不另行了。

情节安全策略 (CSP, Content Security Policy)
是一个外加的安全层,用于扶助检测和缓解某些类型的口诛笔伐,包涵至于启用,页面中的。跨站脚本攻击
(XSS) 和数据注入等攻击。

CSP设置upgrade-insecure-requests

好在 W3C 工作组考虑到了大家升级 HTTPS 的不便,在 2015 年 四月份就出了一个 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:

亚洲必赢官网 2

而是令人不解的是,那几个资源发出了四回呼吁,揣度是浏览器完成的 bug:

亚洲必赢官网 3

当然,如果大家不便利在服务器/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 赞 收藏
评论

亚洲必赢官网 4

点击威逼(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");

理解 Mixed Content

HTTPS 网页中加载的 HTTP 资源被叫作 Mixed
Content(混合内容),分歧浏览器对 Mixed Content 有不等同的拍卖规则。

那个攻击可用于贯彻从数额窃取到网站破坏或作为恶意软件分发版本等用途。内容安全策略在现世浏览器中一度包罗,使用的是
W3C CSP 1.0 标准中讲述的 Content-Security-Policy 底部和下令。

跨站脚本 Cross-site scripting (XSS)

跨站脚本日常指的是通过运用支付时留下的纰漏,注入恶意指令代码(JavaScript/Java/VBScript/ActiveX/Flash/HTML等)到网页,使用户加载并执行攻击者恶意创制的顺序。攻击者可能得到更高的权限、私密网页、会话和cookie等各样内容。如今有二种分化的
HTTP 响应头可以用来严防 XSS 攻击,它们是:

  • X-XSS-Protection
  • Content-Security-Policy

早期的 IE

初期的 IE 在发现 Mixed Content
请求时,会弹出「是不是只查看安全传送的网页内容?」那样一个模态对话框,一旦用户挑选「是」,所有
Mixed Content 资源都不会加载;拔取「否」,所有资源都加载。

那么哪些运用?

CSP 可以由三种艺术指定:HTTP Header 和 HTML。HTTP 是在 HTTP 由扩展Header 来指定,而 HTML 级别则由 Meta 标签指定。

CSP 有两类:Content-Security-Policy 和
Content-Security-Policy-Report-Only。(大小写非亲非故)

HTTP header :
"Content-Security-Policy:" 策略
"Content-Security-Policy-Report-Only:" 策略

HTTP Content-Security-Policy
头可以指定一个或七个资源是平安的,而Content-Security-Policy-Report-Only则是同意服务器检查(非强制)一个政策。七个头的策略定义由预先使用初步定义的。

HTML Meta :
<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">

Meta 标签与 HTTP 头只是行式分化而效果是一律的。与 HTTP
头一样,优先选拔开头定义的国策。假设 HTTP 头与 Meta
定义同时存在,则先行使用 HTTP 中的定义。

若是用户浏览器已经为如今文档执行了一个 CSP 的策略,则会跳过 Meta
的定义。倘诺 META 标签缺少 content 属性也一律会跳过。

本着开发者草案中专门的唤醒一点:为了利用政策生效,应该将 Meta
元素头放在起始地点,以预防提升人为的 CSP 策略注入。

现行,多样化的抨击手段数见不鲜,传统安全解决方案越发难以应对网络安全攻击。OneASP&utm_campaign=AspRaspArti&from=jswgiardnp)
自适应安全平台合并了预测、预防、检测和响应的力量,为您提供精准、持续、可视化的平安防范。想阅读越来越多技术文章,请访问
OneAPM
官方技术博客&utm_campaign=AspRaspArti&from=jswgiardnp)

本文转自 OneAPM 官方博客

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)

相比较新的 IE

正如新的 IE
将模态对话框改为页面底部的提醒条,没有以前那么烦扰用户。而且默许会加载图片类
Mixed Content,其他如 JavaScript、CSS
等资源仍然会按照用户挑选来控制是还是不是加载。

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";

当代浏览器

当代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都坚守了
W3C 的 Mixed Content 规范,将
Mixed Content 分为Optionally-blockable 和 Blockable 两类:

Optionally-blockable 类 Mixed Content
包括那一个危险较小,即使被中间人歪曲也无大碍的资源。现代浏览器默许会加载这类资源,同时会在控制台打印警告信息。那类资源包含:

  • 通过 <img> 标签加载的图形(包含 SVG 图片);
  • 通过 <video> / <audio> 和 <source> 标签加载的视频或音频;
  • 预读的(Prefetched)资源;

除开所有的 Mixed Content
都是 Blockable,浏览器必须禁止加载那类资源。所以现代浏览器中,对于
HTTPS 页面中的 JavaScript、CSS 等 HTTP
资源,一律不加载,间接在控制台打印错误新闻。

MIME-Sniffing

MIME-Sniffing(紧若是Internet Explorer)使用的一种技术,它尝试估量资源的
MIME 类型(也叫做 Content-Type 内容类型)。那意味着浏览器可以忽略由 Web
服务器发送的 Content-Type
Header,而不是尝试分析资源(例如将纯文本标记为HTML
标签),依据它认为的资源(HTML)渲染资源而不是服务器的概念(文本)。即使那是一个百般实惠的功用,可以改进服务器发送的荒唐的
Content-Type,不过心怀不轨的人得以随心所欲滥用这一特性,那使得浏览器和用户可能被恶意抨击。例如,如通过精心制作一个图像文件,并在内部嵌入可以被浏览器所出示和举行的HTML和t代码。《Microsoft
Developer Network:IE8 Security Part V: Comprehensive
Protection》:

Consider, for instance, the case of a picture-sharing web service
which hosts pictures uploaded by anonymous users. An attacker could
upload a specially crafted JPEG file that contained script content,
and then send a link to the file to unsuspecting victims. When the
victims visited the server, the malicious file would be downloaded,
the script would be detected, and it would run in the context of the
picture-sharing site. This script could then steal the victim’s
cookies, generate a phony page, etc.

//HAProxy
http-response set-header X-Content-Type-Options: nosniff
//Nginx
add_header X-Content-Type-Options "nosniff" always;

挪动浏览器

眼前所说都是桌面浏览器的作为,移动端景况相比复杂,当前多数移动浏览器默许都同意加载
Mixed Content。也就是说,对于移动浏览器来说,HTTPS 中的 HTTP
资源,无论是图片如故 JavaScript、CSS,默许都会加载。

诚如拔取了全站 HTTPS,就要幸免出现 Mixed Content,页面所有资源请求都走
HTTPS 协议才能确保所有平台具有浏览器下都不曾问题。

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

创设使用 CSP

CSP,全称是 Content Security
Policy,它有不行多的授命,用来完成种种各类与页面内容安全相关的效果。这里只介绍四个与
HTTPS 相关的下令,越来越多内容可以看自己前边写的《Content Security Policy
Level 2
介绍》。

暴露 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

block-all-mixed-content

面前说过,对于 HTTPS 中的图片等 Optionally-blockable 类 HTTP
资源,现代浏览器默许会加载。图片类资源被吓唬,日常不会有太大的问题,但也有一对风险,例如很多网页按钮是用图片达成的,中间人把那么些图片改掉,也会苦恼用户使用。

通过 CSP
的 block-all-mixed-content 指令,可以让页面进入对混合内容的严俊检测(Strict
Mixed Content Checking)格局。在那种格局下,所有非 HTTPS
资源都不容许加载。跟别的具有 CSP
规则一样,可以经过以下两种办法启用那几个命令:

HTTP 响应头格局:

JavaScript

Content-Security-Policy: block-all-mixed-content

1
Content-Security-Policy: block-all-mixed-content

<meta> 标签方式:

XHTML

<meta http-equiv=”Content-Security-Policy”
content=”block-all-mixed-content”>

1
<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">

测试

有惊无险商量员 斯科特 Helme 进献了一个格外棒的网站
[https://securityheaders.io/\],可以分析自己站点的Header(报文头),并提议立异安全性的指出。示例如下(环境参数,Operating
System: CentOS 7 ; haproxy 1.5.14 ; nginx 1.12.0)。

  • 巩固前的检测结果
![](https://upload-images.jianshu.io/upload_images/1037849-af2f51678e583572.png)

加固前
  • 巩固后的检测结果
![](https://upload-images.jianshu.io/upload_images/1037849-3d4af6ce7042c7b9.png)

加固后

upgrade-insecure-requests

历史悠久的大站在往 HTTPS
迁移的进程中,工作量往往非凡伟大,更加是将装有资源都替换为 HTTPS
这一步,很简单爆发疏漏。尽管拥有代码都认可不成问题,很可能某些从数据库读取的字段中还留存
HTTP 链接。

而通过 upgrade-insecure-requests 这么些 CSP
指令,可以让浏览器帮助做这一个转换。启用那么些方针后,有多个变化:

  • 页面所有 HTTP 资源,会被轮换为 HTTPS 地址再发起呼吁;
  • 页面所有站内链接,点击后会被轮换为 HTTPS 地址再跳转;

跟任何具有 CSP
规则平等,这么些命令也有三种艺术来启用,具体格式请参考上一节。须要专注的是 upgrade-insecure-requests 只替换协议部分,所以只适用于
HTTP/HTTPS 域名和路线完全一致的景观。

合理利用 HSTS

在网站全站 HTTPS 后,借使用户手动敲入网站的 HTTP
地址,或者从此外地点点击了网站的 HTTP 链接,爱惜于服务端 301/302
跳转才能应用 HTTPS 服务。而首先次的 HTTP
请求就有可能被威吓,导致请求不能抵达服务器,从而结成 HTTPS 降级吓唬。

HSTS 基本使用

以此题材可以透过 HSTS(HTTP Strict Transport
Security,RFC6797)来缓解。HSTS
是一个响应头,格式如下:

JavaScript

Strict-Transport-Security: max-age=expireTime [; includeSubDomains]
[; preload]

1
Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]

max-age,单位是秒,用来报告浏览器在指定时间内,那么些网站必须透过 HTTPS
协议来走访。也就是对此这么些网站的 HTTP 地址,浏览器必要先在地点替换为
HTTPS 之后再发送请求。

includeSubDomains,可选参数,若是指定那个参数,表明那个网站有着子域名也必须通过
HTTPS 协议来拜访。

preload,可选参数,前边再介绍它的功效。

HSTS 这些响应头只可以用于 HTTPS 响应;网站必须运用默许的 443
端口;必须运用域名,无法是 IP。而且启用 HSTS
之后,一旦网站证书错误,用户不可以取舍忽略。

HSTS Preload List

能够看来 HSTS 可以很好的缓解 HTTPS 降级攻击,可是对于 HSTS 生效前的首次HTTP 请求,仍旧不知道该肿么办防止被勒迫。浏览器厂商们为了化解那一个问题,提议了 HSTS
Preload List
方案:内置一份列表,对于列表中的域名,固然用户此前从未访问过,也会选用HTTPS 协议;列表可以定期更新。

眼下那个 Preload List 由 谷歌(Google) Chrome 维护,Chrome、Firefox、Safari、IE
11 和 Microsoft Edge
都在应用。要是要想把温馨的域名加进那几个列表,首先须要满足以下标准:

  • 不无合法的表明(假诺应用 SHA-1 证书,过期日子必须早于 2016 年);
  • 将所有 HTTP 流量重定向到 HTTPS;
  • 担保所有子域名都启用了 HTTPS;
  • 输出 HSTS 响应头:
    • max-age 无法低于 18 周(10886400 秒);
    • 总得指定 includeSubdomains 参数;
    • 必须指定 preload 参数;

即使知足了上述所有标准,也不必然能进入 HSTS Preload
List,更多新闻可以看这里。通过
Chrome 的 chrome://net-internals/#hsts工具,能够查询某个网站是还是不是在
Preload List 之中,还足以手动把某个域名加到本机 Preload List。

对此 HSTS 以及 HSTS Preload List,我的指出是一旦您不可能确保永远提供 HTTPS
服务,就不要启用。因为如果 HSTS 生效,你再想把网站重定向为
HTTP,以前的老用户会被无限重定向,唯一的点子是换新域名。

CDN 安全

对于大站来说,全站迁移到 HTTPS 后或者得用 CDN,只是必须挑选协理 HTTPS 的
CDN 了。若是拔取第三方 CDN,安全地点有一对须求考虑的地点。

合理利用 SRI

HTTPS
可以预防数据在传输中被篡改,合法的申明也得以起到表达服务器身份的成效,但是假设CDN 服务器被侵入,导致静态文件在服务器上被篡改,HTTPS 也无力回天。

W3C 的 SRI(Subresource
Integrity)规范可以用来缓解那一个题材。SRI
通过在页面引用资源时指定资源的摘要签名,来落成让浏览器验证资源是或不是被曲解的目标。只要页面不被篡改,SRI
策略就是可依赖的。

有关 SRI 的更加多表达请看我事先写的《Subresource Integrity
介绍》。SRI 并不是
HTTPS
专用,但若是主页面被要挟,攻击者可以轻松去掉资源摘要,从而失去浏览器的
SRI 校验机制。

了解 Keyless SSL

别的一个题材是,在采取第三方 CDN 的 HTTPS
服务时,假使要动用自己的域名,需求把相应的证件私钥给第三方,那也是一件高风险很高的事务。

CloudFlare 集团针对这种现象研发了 Keyless SSL
技术。你可以不把证件私钥给第三方,改为提供一台实时总括的 Key Server
即可。CDN 要用到私钥时,通过加密通道将要求的参数传给 Key Server,由 Key
Server 算出结果并回到即可。整个进度中,私钥都有限扶助在友好的 Key Server
之中,不会揭发给第三方。

CloudFlare
的那套机制已经开源,如需询问详情,可以查阅他们官方博客的那篇文章:Keyless
SSL: The Nitty Gritty Technical
Details。

好了,本文先就写到那里,须要专注的是本文提到的 CSP、HSTS 以及 SRI
等政策都唯有新型的浏览器才支撑,详细的援救度可以去CanIUse 查。切换到HTTPS
之后,在性能优化上有很多新工作要做,那部分内容我在头里的博客中写过无数,那里不再重复,只说最重大的某些:既然都
HTTPS 了,赶紧上 HTTP/2 才是正道。

1 赞 4 收藏
评论

亚洲必赢官网 7

网站地图xml地图