HTTP协议安全头部的笔记
本文于2016年3月完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。
近日项目组对当前开发、维护的Web系统做了AppScan扫描,扫描的结果惨不忍睹,问题很多。报告中报到“缺乏HTTP安全头部”。之前对HTTP协议的安全头部了解不多,为了消除AppScan报告中的警告,同时做更多的了解,搜集了一些相关的资料,于是有了本篇汇总笔记。
HTTP协议的安全头部
安全是一个非常大的话题,比如下面提到的HTTP安全头部,每个都可以使用单独的文章来说明和介绍。但Jackie当前还处于Web开发的入门阶段,还谈不上什么心得体会,先把找到的文章罗列出来吧。
- 4 HTTP SECURITY HEADERS YOU SHOULD ALWAYS BE USING,中文翻译一,中文翻译二
- Guidelines for Setting Security Headers,中文版
- 一些安全相关的HTTP响应头
HTTP Strict Transport Security
- 来自mozilla开发者网站,HTTP Strict Transport Security
- 来自wikipedia,HTTP Strict Transport Security
- 来自owasp,HTTP Strict Transport Security
- 为什么我们要使用HTTP Strict Transport Security?
对于企业级Web应用,最简单直接的方法是禁用HTTP访问方式,全站启用HTTPS协议的支持,省事也安全;不过对于大型网站而言,全站启用HTTPS会带来其它方面的工作,来自百度运维部的相关总结值得一看,如下。
- 全站 https 时代的号角 : 大型网站的 https 实践系列
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
- 大型网站的 HTTPS 实践(2):HTTPS 对性能的影响
- 大型网站的 HTTPS 实践(3):基于协议和配置的优化
- 大型网站的 HTTPS 实践(4):协议层以外的实践
X-Frame-Options
- X-Frame-Options的介绍,中文版
- 使用HTTP 响应头信息中的 X-Frame-Options 属性防止网页被Frame
- 点击劫持(clickjacking)与X-Frame-Options Header
- Overcoming “Display forbidden by X-Frame-Options”,stackoverflow上的帖子,值得一读
X-Content-Type-Options
X-XSS-Protection
Content-Security-Policy
据caniuse上查询到的数据,IE系列的浏览器对CSP支持程度较低;由于我厂的用户主要还是使用IE系列的浏览器,因此暂时不需要启用支持。
- Content Security Policy Level 2
- W3C中文网站wiki上CSP的词条
- Content Security Policy Level 2 介绍
- Content Security Policy 介绍
- HTTP 的内容安全策略(CSP)
- HTML5安全介绍之内容安全策略(CSP)简介,中文版
- HTTP 的内容安全策略(CSP)
如何增加安全头部
nginx的配置
网上有很多现成的资料,如下内容来自keakon的涂鸦馆,折腾了一下 nginx 配置
add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
add_header X-XSS-Protection "1; mode=block"; # XSS 保护
add_header Strict-Transport-Security: max-age=31536000; includeSubDomains
Tomcat的配置
大概是在7.0.63版本,Apache Tomcat引入了org.apache.catalina.filters.HttpHeaderSecurityFilter
,用于增加对前述安全头部的支持,但并不完善;当前9.0.X版本中支持如下安全头部。
- Strict-Transport-Security
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
如果使用7.0.63版本以后的Tomcat,可以修改$CATALINA_BASE/conf/web.xml
文件,找到并取消如下Filter的配置。
<!--
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
</filter>
-->
<!-- 其它配置 -->
<!--
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
-->
如果使用低于7.0.63版本的Tomcat,可以使用org.apache.catalina.filters.HttpHeaderSecurityFilter
类的最新代码编译、打包成扩展包,放在$CATALINA_BASE/lib
路径下;同时在$CATALINA_BASE/conf/web.xml
文件中增加上述配置。
org.apache.catalina.filters.HttpHeaderSecurityFilter
提供了一些扩展配置,具体使用方法可以参考Apache Tomcat的官方文档。
其它资料
- Can I Use,浏览器兼容情况验证的网站
- 使用HTTP Headers防御WEB攻击(Part1)
- 使用HTTP Headers防御WEB攻击(Part2)
- 利用CSP探测网站登陆状态(alipay/baidu为例)
- 浏览器安全策略说之内容安全策略CSP
- web前端利用HSTS(新的Web安全协议HTTP Strict Transport Security)漏洞的超级Cookie(HSTS Super Cookie)
HTTP协议安全头部的笔记的更多相关文章
- TCP/IP协议原理与应用笔记18:构成子网和超网
1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模 C类地址:少于255台主机的网络 B类地址:介于255~65535台主机的网络 ...
- TCP/IP协议原理与应用笔记17:IP编址(重点)
1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...
- TCP/IP协议原理与应用笔记06:OSI参考模型全称
1. ISO是一个组织,OSI是一个模型. 2. OSI不是协议,是网络体系结构的概念模型 3. OSI参考模型全称为: Open System Interconnection Reference M ...
- HTTP协议安全头部X-Content-Type-Options引入的问题
前段时间测试MM反馈了一个问题,在富文本编辑器里上传的图片无法正常呈现.因为Jackie在本机的环境上没有观察类似的现象,而恰好那天测试环境的某个重要配项被改错了,于是Jackie想当然的归类为配置项 ...
- HTTP 协议的头部
转自:http://network.51cto.com/art/201509/490594.htm HTTP首部字段有四种类型:通用首部字段,请求首部字段,响应首部字段,实体首部字段. 通用首部字段: ...
- TCP/IP协议原理与应用笔记26:网际协议(IP)之 分片(Fragmentation)
1. 分片(Fragmentation) 适应在不同的MTU的物理网上传输. 备注: MTU:最大传输单元,Maximum Transmission Unit,它是指一种通信协议的某一层上面所能通过的 ...
- TCP/IP协议原理与应用笔记25:网际协议(IP)之 数据报(Datagram)
1. 数据报(Datagram)格式: 2. 长度字段 (1)首部长度字段, bits 以 4 字节(即32bits)为单位 取值:5~15(即首部长度为20 ~ 60 bytes) (2)总长度字段 ...
- TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
1. IP协议:(网际协议) 2. IP协议(不可靠无连接数据报协议) (1)连接 vs. 可靠性 连接:面向连接.无连接 可靠:差错控制.流量控制等 面向连接不一定保证可靠,无连接不一定不可靠 在连 ...
- TCP/IP协议原理与应用笔记20:直接交付 和 间接交付
1. 直接交付 和 间接交付 直接交付:分组的目的与分组的发送接口在同一个IP网络中 间接交付:分组的目的与分组的发送接口在不同的IP网络中 如图: 2. 交付过程: (1)交付方式判别 分组的目的I ...
- TCP/IP协议原理与应用笔记19:IP分组的交付和路由选择
1. 引言: (1)互联网结构: 信息:IP分组(直接广播地址(Directed Broadcast Address),其指定了在一个特定网络中的"所有主机".) 节点:路由器.主 ...
随机推荐
- Rock Pi开发笔记(三):Rock Pi 4B plus(基于瑞星微RK3399)板子硬件资源介绍
前言 上一篇,概览了整个的rock pi大致系列,我们开始定位为RK3399做评估,入手RK3399,对基本的外设进行解说. 板载外设 USB3.0 × 2 USB2.0 × 2 千 ...
- contextmanager装饰器
虽然上下文管理器很好用,但定义一个符合协议的管理器对象其实挺麻烦的 得首先创建一个类,然后实现好几个魔法方法.为了简化这部分工作,python 提供了一个非常好用的工具:@contextmanager ...
- 【Python语法糖】闭包和装饰器
Python闭包和装饰器 参考: https://zhuanlan.zhihu.com/p/453787908 https://www.bilibili.com/video/BV1JW411i7HR/ ...
- 【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
问题描述 在Java应用中,使用 Lettuce 作为客户端SDK与Azure Redis 服务连接,当遇见连接断开后,长达15分钟才会重连.导致应用在长达15分的时间,持续报错Timeout 问题解 ...
- 【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
问题描述 在Azure Function中创建一个PowerShell的函数后,其中使用了Get-AzMaintenanceUpdate,New-AzApplyUpdate 等指令,但是在执行时错误. ...
- Java 方法的重载(overload)
1 /* 2 * 3 * 方法的重载(overload) 4 * 1.定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同 5 * 6 * "两同一不同&quo ...
- C++ //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 //vector数据存取 vector互换容器 vector预留空间
1 //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 2 //vector数据存取 vector互换容器 vector预留空间 3 #include&l ...
- kubernetes 1.27.1最新版集群部署
kubernetes 1.27.1 最新版集群部署国内环境 官方安装部署文档:https://kubernetes.io/zh-cn/docs/setup/production-environment ...
- [学习笔记]在CentOS7中用Docker方式安装Jenkins
@ 目录 原理: 创建Docker网桥网络 安装DinD 创建镜像 构建镜像 运行容器 原理: Docker in Docker (以下简称 DinD)可以在 Container 中直接运行一个 Do ...
- web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目
一.业务场景 最近在开发新功能,新功能主要就是写app的首页查询接口,接口比较多有十几个,首页会有各种查询,新增操作比较少.由于用户量 比较大,据说并发量不小,所以首页的很多查询都做了缓存处理,用来提 ...