提高安全性而在HTTP响应头中可以使用的各种响应头字段
本文介绍在Web服务器做出响应时,为了提高安全性而在HTTP响应头中可以使用的各种响应头字段。由于部分浏览器中有可能对某些字段或选项不提供支持,所以在使用这些字段时请先确认客户端环境。
X-Frame-Options
该响应头中用于控制是否在浏览器中显示frame或iframe中指定的页面,主要用来防止Clickjacking(点击劫持)攻击。
X-Frame-Options: SAMEORIGIN
- DENY 禁止显示frame内的页面(即使是同一网站内的页面)
- SAMEORIGIN 允许在frame内显示来自同一网站的页面,禁止显示来自其他网站的页面
- ALLOW-FROM origin_uri允许在frame内显示来自指定uri的页面(当允许显示来自于指定网站的页面时使用)
X-Content-Type-Options
如果从script或stylesheet读入的文件的MIME类型与指定MIME类型不匹配,不允许读取该文件。用于防止XSS等跨站脚本攻击。
X-Frame-Options: nosniff
X-XSS-Protection
用于启用浏览器的XSS过滤功能,以防止XSS跨站脚本攻击。
X-XSS-Protection: 1; mode=block
- 0 禁用XSS过滤功能
- 1 启用XSS过滤功能
Content-Security-Policy
用于控制当外部资源不可信赖时不被读取。用于防止XSS跨站脚本攻击或数据注入攻击(但是,如果设定不当,则网站中的部分脚本代码有可能失效)。
之前的字段名为X-Content-Security-Policy
Content-Security-Policy: default-src 'self'
- default-src 'self' 允许读取来自于同源(域名+主机+端口号)的所有内容
- default-src 'self' *.example.com允许读取来自于指定域名及其所有子域名的所有内容
X-Permitted-Cross-Domain-Policies
用于指定当不能将“crossdomain.xml”文件(当需要从别的域名中的某个文件中读取Flash内容时用于进行必要设置的策略文件)放置在网站根目录等场合时采取的替代策略。
X-Permitted-Cross-Domain-Policies: master-only
- master-only 只允许使用主策略文件(/crossdomain.xml)
Strict-Transport-Security
用于通知浏览器只能使用HTTPS协议访问网站。用于将HTTP网站重定向到HTTPS网站。
Strict-Transport-Security: max-age=31536000; includeSubDomains
- max-age 用于修改STS的默认有效时间。
- includeSubDomains 用于指定所有子域名同样使用该策略。
Access-Control-Allow-Origin等CORS相关字段
当使用XMLHttpRequest从其他域名中获取资源进行跨域通信时使用。
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-TRICORDER
Access-Control-Max-Age: 1728000
上述代码用于设定与“http://www.example.com”进行跨域通信处理,允许使用POST, GET, OPTIONS方法,在发送的请求头中添加X-TRICORDER字段,通信超时时间为1,728,00秒。
X-Download-Options
用于放置直接打开用户下载文件。
X-Download-Options: noopen
- noopen 用于指定IE 8以上版本的用户不打开文件而直接保存文件。在下载对话框中不显示“打开”选项。
Set-Cookie
用于设置Cookie。
Set-Cookie: name=value; secure; HttpOnly
- secure 只在进行HTTP通信时发送Cookie。
- HttpOnly 指定不能从JavaScript脚本代码访问Cookie值。
- 虽然path属性用于指定Cooki发送路径,但是不能被作为一种安全手段。
- domain属性具有后方一致特性,出于安全考虑最好不要使用该属性,除非明确指定向多个域发送Cookie。
Cache-Control
指定浏览器的缓存方式,通过逗号分隔。
Cache-Control: no-cache, no-store, must-revalidate
- no-cache 指定服务器端不缓存数据。
- no-store 指定不能在本地缓存中保存数据。
- must-revalidate 指定服务器端可以缓存数据,但是必须对数据进行确认。
pragma
用于与HTTP/1.0进行向后兼容的响应头字段,原本只被使用在客户端请求头中。与“Cache-Control: no-cache”结合使用。
pragma: no-cache
- no-cache 客户端要求所有中间服务器不能缓存数据。
expires
指定数据的有效时间。不希望缓存数据时可以将该字段值与Date字段值指定为相同值或者将该字段值指定为“-1”。
expires: -1
content-type
指定实体内对象的媒体类型(MediaType)。在charset关键字中指定文字编码格式。
content-type: text/html;charset=utf-8
HTTP响应头的设定方法
在Apache服务器中指定响应头时,需要在httpd.conf文件中将下述模块设定为有效状态。
- LoadModule headers_module modules/mod_headers.so
然后使用下述方法设定HTTP响应头。
Header set HeaderFieldName "value"
//例如
Header set X-XSS-Protection "1; mode=block”
提高安全性而在HTTP响应头中可以使用的各种响应头字段的更多相关文章
- shiro + jwt 实现 请求头中的 rememberMe 时间限制功能
前言: 上一篇提出, 通过修改 rememberMe 的编码来实现 rememberMe的功能的设想, 事后我去尝试实现了一番, 发现太麻烦, 还是不要那么做吧. 程序还是要越简单越好. 那功能总是要 ...
- 前端必备HTTP技能之HTTP请求头响应头中常用字段详解(转)
作为一名前端开发人员,肯定少不了要和网络打交道,因为要从服务器端拉取数据,从服务端获取数据最常用的方式还是通过HTTP请求.给服务器发请求的时候有请求头,接受服务器响应的时候有响应头,客户端和服务器端 ...
- Http消息头中常用的请求头和响应头
作为Web开发对常用http的请求头和响应头熟悉了解一下还是很有必要的.比如请求头中Content-type指定了请求的内容,若类型是application/x-www-form-urlencoded ...
- 你知道 http 响应头中的 ETag 是如何生成的吗
关于 etag 的生成需要满足几个条件 当文件不会更改时,etag 值保持不变.所以不能单纯使用 inode 便于计算,不会特别耗 CPU.这样子 hash 不是特别合适 便于横向扩展,多个 node ...
- 面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改
本篇文章由我的 一日一题 中的四个 Issue 组合而成 [Q111]http 响应头中的 ETag 值是如何生成的 [Q112]如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已 ...
- HTTP 请求头中的 X-Forwarded-For(转)
原文:https://imququ.com/post/x-forwarded-for-header-in-http.html 我一直认为,对于从事 Web 前端开发的同学来说,HTTP 协议以及其他常 ...
- 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击
CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...
- Http 请求头中的 Proxy-Connection
平时用 Chrome 开发者工具抓包时,经常会见到 Proxy-Connection 这个请求头.之前一直没去了解什么情况下会产生它,也没去了解它有什么含义.最近看完<HTTP 权威指南> ...
- 如何在HTTP头中隐藏PHP版本号
PHP 配置默认允许服务器在 HTTP 响应头 X-Powered-By 中显示安装在服务器上的 PHP 版本.出于服务器安全原因(虽然不是主要的要担心的威胁),建议你禁用或隐藏此信息,避免那些针对你 ...
随机推荐
- grep -i 不区分大小写
# rpm -qa|grep -i "mysql" MySQL-server--.rhel5.x86_64 MySQL-test--.rhel5.x86_64 MySQL-embe ...
- 虚拟机Class文件结构笔记
>>Java语言的平台无关性 Java是与平台无关的语言,“一次编写,到处运行”,这一方面依赖于Java源代码编译后生成的存储字节码的文件,即Class文件是语言和平台无关的: 另一方面依 ...
- 实现VS2010整合NUnit进行单元测试(转载)
代码编写,单元测试必不可少,简单谈谈Nunit进行单元测试的使用方式: 1.下载安装NUnit(最新win版本为NUnit-2.6.4.msi) http://www.nunit.org/index. ...
- js onclick="return test()"事件返回值,对有些事件,会影响默认动作的执行。如:onclick和onsubmit
onclick="return test()"事件返回值,对有些事件,会影响默认动作的执行.如:onclick和onsubmit <body> <!--事件返回值 ...
- 1-02 启动和停止Sql Sever的服务
启动Sql Sever服务的三种方式 1:后台启动服务. 2:Sql Sever配置管理员启动服务. 3:在运行窗口中使用命令启动和停止服务: 启动:net start mssqlsever. 停止 ...
- [Tools] 使用XP远程登录Win8系统
[背景] 完成最基本的设置后,发现xp依然不能远程访问win8桌面,搜索后发现需要进一步设置 [开工] 按照参考资料进行设置,下面的参考资料已经写的很详细了,只是参考资料2中的文件名: redss ...
- 【荐】Spring事务配置的五种方式
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...
- T-SQL Transact-SQL 编程
T-SQL语句用于管理SQL Server数据库引擎实例,创建和管理数据库对象,以及查询.插入.修改和删除数据. Ø 变量 . 局部变量(Local Variable) 局部变量是用户可以自定义的变量 ...
- centos7安装redis3.2.5
安装redis 1官方介绍 Installation Download, extract and compile Redis with: $ wget http://download.redis.io ...
- Eclipse中Ctrl+方法名发现无法进入到该方法中……
我现在的情况是,按住Ctrl点击该方法后,发现进入不到这个方法的定义. 后来我发现,是因为这个项目是在某个项目文件夹中,如下: 这时直接找到server这个项目就没有问题了,如图: