的有些经验分享,Web应用服务器安全

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

2015/08/26 · 基础技术 ·
的有些经验分享,Web应用服务器安全。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)
是一个外加的安全层,用于协助检测和化解某些类型的口诛笔伐,包罗的有些经验分享,Web应用服务器安全。跨站脚本攻击
(XSS) 和数码注入等攻击。

CSP设置upgrade-insecure-requests

好在 W3C 工作组考虑到了我们升级 HTTPS 的诸多不便,在 2015 年 2月份就出了一个 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">

测试

安然探究员 Scott 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 由 谷歌 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

Leave a Comment.