【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

怎样强化你的 HTTP 安全标头?

  • 2020-06-18
  • 本文字数:2853 字

    阅读完需:约 9 分钟

怎样强化你的HTTP 安全标头?


为保护网站或 web 应用程序需要考虑很多事情,但一个好的起点是考察一些 HTTP 安全标头,并确保你采用了最佳实践。许多情况下,这些实践非常容易操作,只需要稍微改变一下服务器配置即可。HTTP 安全标头能减少攻击和安全漏洞,从而增加一个额外的安全层。在本文中,我们将探索其中的一些安全标头,帮助你更好地理解其用途,了解如何实现它们。

什么是 HTTP 安全标头?

每当浏览器向服务器请求一个页面时,服务器就会用内容和HTTP响应标头来响应。其中一些标头就包含内容元数据,如 Content-Encoding、Cache-Control、状态代码等。



除此之外,还有一些 HTTP 安全标头,它们会告诉浏览器在处理网站内容时应该做什么。例如,使用Strict-Transport-Security(严格安全传输),你就可以强制要求浏览器仅通过 HTTPS 进行通信。我们将在下面探讨 6 个不同的 HTTP 安全标头(无特定顺序),你应该知道它们,并且我们建议你尽可能实现它们。

1.内容安全策略(Content Security Policy)

内容安全策略(Content-Security-Policy)标头提供了一个额外的安全层。该策略定义了被许可的内容源,允许浏览器加载这些内容源,从而防止跨站点脚本(XSS)攻击及其他代码注入攻击。



目前,所有主流浏览器都完全或部分支持内容安全策略标头。而且就算它遇到了老式浏览器也不会中断内容的传递,这种情况下它只是不执行而已。



内容安全策略可以用到许多指令。下面这个例子允许来自当前域(由“self”定义)和 google-analytics.com 的脚本。


Content-Security-Policy: script-src 'self' https://www.google-analytics.com
复制代码


要了解所有指令,并查看其在 Nginx 和 Apache 上的实现,请务必查看我们更深入的关于内容安全策略的帖子

2.X-XSS-Protection

X-XSS-Protection标头旨在启用内置于现代浏览器的跨站点脚本(XSS)过滤器。这种过滤器通常是默认启用的,但使用这个标头会强制执行它。 Internet Explorer 8+、Chrome 和 Safari 都支持此标头。以下是标头的一个示例:


X-XSS-Protection: 1;mode=block
复制代码


在 Nginx 中启用


add_header X-XSS-Protection "1;mode=block" always;
复制代码


在 Apache 中启用


header always set X-XSS-Protection "1;mode=block"
复制代码

3.HTTP 严格安全传输(HSTS)

严格安全传输标头是一种安全增强功能,它会限制浏览器仅通过 HTTPS 访问服务器。所以它确保了他人不能通过不安全且易受攻击的 HTTP 连接发起访问。



除了 Opera Mini 和早期版本的 Internet Explorer 之外,目前所有主要的现代浏览器都支持 HTTP 严格安全传输。



这是一个 HSTS 标头的例子:你可以加入 max age、subdomain 和 preload 参数。


Strict-Transport-Security: max-age=31536000;includeSubDomains;preload
复制代码


欲阅读更多关于此标头的信息,并了解其在 Nginx 和 Apache 上的实现,请查看我们关于严格安全传输更深入的帖子。

4.X-Frame-Options

X-Frame-Options标头不允许在网站上加载框架,从而提供点击劫持保护。目前,IE 8+、Chrome 4.1+、Firefox 3.6.9+、Opera 10.5+、Safari 4+均支持它。以下是该标头的一个示例:


X-Frame-Options: SAMEORIGIN
复制代码


在 Nginx 中启用


add_header X-Frame-Options "SAMEORIGIN" always;
复制代码


在 Apache 中启用


header always set X-Frame-Options "SAMEORIGIN"
复制代码

5.Expect-CT

Expect-CT标头允许网站报告和强制实施证书透明度要求,从而防止错误颁发的证书被使用。启用此标头后,网站将要求浏览器验证证书是否出现在公共CT日志中。以下是该标头的一个示例:


Expect-CT: max-age=604800, enforce, report-uri="https://www.example.com/report"
复制代码


在 Nginx 中启用


add_header Expect-CT "max-age=604800, enforce, report-uri='https://www.example.com/report' always;
复制代码


在 Apache 中启用


header always set Expect-CT "max-age=604800, enforce, report-uri="https://www.example.com/report"
复制代码

6.X-Content-Type-Options

X-Content-Type-Options标头能防止 IE 浏览器和谷歌浏览器从声明的Content-Type中嗅探响应。因此它能降低偷渡式(drive-by)下载攻击的风险,并能帮助正确处理内容。以下是该标头的一个示例:


X-Content-Type-Options: nosniff
复制代码


在 Nginx 中启用


add_header X-Content-Type-Options "nosniff" always;
复制代码


在 Apache 中启用


header always set X-Content-Type-Options "nosniff"
复制代码

7.功能-策略(Feature-Policy)

功能-策略标头赋予你允许或拒绝浏览器某些功能的能力,无论是在它自己的框架中还是在内联框架元素(< iframe >)中的内容中。以下是该标头的一个示例:


Feature-Policy: autoplay 'none';camera 'none'
复制代码


在 Nginx 中启用


add_header Feature-Policy "autoplay 'none';camera 'none'" always;
复制代码


在 Apache 中启用


header always set Feature-Policy "autoplay 'none';camera 'none'"
复制代码

如何检查 HTTP 安全标头?

下面是三种检查 HTTP 安全标头的快捷方法,HTTP 安全标头是 HTTP 响应标头的一部分。

1.KeyCDN 的 HTTP 标头检查工具

KeyCDN 发布了一个在线的HTTP标头检查工具,你可以很容易地使用它来检索当前在网站上运行的 HTTP 安全标头。只需输入你想要检查的网址即可。



然后,它会返回 HTTP 响应标头。


2.Chrome DevTools 响应标头

另一种快捷方法是启动Chrome DevTools来访问 HTTP 安全标头。要运行此操作,请单击网络面板,按Ctrl + R (Cmd + R)刷新页面。点击进入域的请求,你就会看到响应标头的一个片段。

3.使用 Security Headers 来扫描你的网站

检查 HTTP 安全标头的第三种方法是在Security Headers上扫描你的网站。这是一个方便的小工具,它由信息安全顾问斯科特·赫尔姆开发。基于当前的 HTTP 安全标头,它会给网站一个评级,从 F 级一直到 A+级。一定要把收藏这个网址。以下是斯科特自己网站上的一个A+评级的例子。



下面是一个F级评级的例子,它没有任何在 Citi 的公司网站上能够轻松找到的 HTTP 安全标头。



这个工具会输出原始 HTTP 标头,并为你提供每个 HTTP 安全标头的摘要以及缺少的内容。




斯科特还创建了一个Chrome插件Firefox插件,在这两个插件中,你可以扫描你想要分析的网站的 HTTP 安全标头。斯科特在 2016 年 2 月对 Alexa 排名前 100 万的网站进行了分析,并查看了它们的HTTP安全标头的使用情况,结果可能会让你大吃一惊。使用严格安全传输标头的网站数量几乎翻了一番。因此,似乎越来越多的人正在开始实施这些措施,尤其是现在,许多公司正在向HTTPS迁移。所以,我们建议你在进行 HTTPS 迁移期间对当前的安全策略进行全面的评估。



内容安全策略(CSP)尤其可以成为防止跨站点脚本(XSS)攻击的强大机制,跨站点脚本(XSS)攻击占网站所有安全漏洞的84%。然而,正如你在前面看到的,只有不到 5%的网站在积极使用标头。所以这亟需改变。

综述

正如你所见,HTTP 安全标头有助于加强网站的安全性,在大多数情况下,你没有理由不使用它们。如果你不能控制别人对你的服务器的访问,我们建议你联系网络主机供应商,让他们知道这件事。也许你可以给他们发一个来自 securityheaders.io 的链接。F 级的评级从来就不是件好事!


英文原文:


Hardening Your HTTP Security Headers


2020-06-18 15:564005
用户头像

发布了 34 篇内容, 共 18.5 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

关河因果将机器学习融合逻辑规则,突破黑盒壁垒

6979阿强

数据分析 大数据分析 关河因果 关河智图 因果分析

如何给研发团队分钱?

菜根老谭

研发体系 绩效管理 激励体系

5分钟快速上线Web应用和API(Vercel)

Liam

前端 前端开发 开发 Postman API

一张图解码 OpenCloudOS 社区开放日

腾源会

使用GetX构建更优雅的Flutter页面结构

岛上码农

flutter ios 前端 安卓开发 6月月更

数据库每日一题---第20天:按日期分组销售产品

知心宝贝

数据库 程序员 前端 后端 6月月更

[译]关于 Python 中的数字你可能不知道的 3 件事

宇宙之一粟

Python 6月月更

如何做好研发效能度量及指标选取

思码逸研发效能

研发效能

详解openGauss多线程架构启动过程

华为云开发者联盟

数据库 后端

年中大促 | 集成无忧,超值套餐 6 折起

融云 RongCloud

华为云招募工业智能领域合作伙伴,强力扶持+商业变现

华为云开发者联盟

云计算 华为云 工业数据智能

活动预约|阿里云如何搭建云服务 SRE 与可观测体系

阿里巴巴云原生

阿里云 云原生 可观测 峰会

51万奖池邀你参战!第二届阿里云ECS CloudBuild开发者大赛来袭

阿里云弹性计算

阿里云 分布式缓存 开发者大赛 加密计算 大数据加速

axios(二)

小恺

6月月更

万字攻略,详解腾讯面试(T1-T9)核心技术点,面试题整理

C++后台开发

后台开发 面试题 Linux服务器开发 C++后台开发 腾讯面试

C语言字符串与内存库函数的介绍与模拟实现

未见花闻

6月月更

一文简述:钓鱼攻击知多少

穿过生命散发芬芳

6月月更 钓鱼攻击

如何在物联网低代码平台中使用数据字典功能?

AIRIOT

物联网 低代码平台

数据科学家是不是特有前途的职业?

袁袁袁袁满

支持在 Kubernetes 运行,添加多种连接器,SeaTunnel 2.1.2 版本正式发布!

Apache SeaTunnel

Apache 大数据 开源 workflow

再读凤凰架构-分布式架构更清晰

BeyondLife

分布式 凤凰架构

Fegin的解析

卢卡多多

OpenFegin 6月月更

为 Serverless Devs 插上 Terraform 的翅膀,解耦代码和基础设施,实现企业级多环境部署(下)

阿里巴巴云原生

阿里云 开源 云原生 Serverless Devs

一篇文章带你对Java对象创建过程解密

派大星

JVM

预约直播|机器学习PAI:AI加速计划

阿里云大数据AI技术

AI 模型开发训练

博睿数据出席阿里云可观测技术峰会,数字体验管理驱动可持续发展

博睿数据

可观测性 智能运维 博睿数据 数字体验管理

物联网开源开发平台 Shifu 开放内测!第一版技术文档发布

亚马逊云科技 (Amazon Web Services)

物联网 Tech 专栏

如何低成本快速搭建企业知识库?

小炮

数字经济加速落地,能为中小企业带来什么?

脑极体

华为云如何实现实时音视频全球低时延网络架构【上】

坚果

6月月更

学习 | 写论文看这一篇就够了~

写程序的小王叔叔

学习笔记 论文阅读 论文写作 6月月更

怎样强化你的HTTP 安全标头?_安全_Brian Jackson_InfoQ精选文章