HTTP报文头—安全问题

Mirror王宇阳

2019-10-01

参考:MDN技术文档;《http头安全相关的选项_by`myh0st》

认识HTTP协议

https://www.cnblogs.com/wangyuyang1016/p/10421073.html

HTTP是一个可扩展的协议~

X-Frame-Options:

X-Frame-Options HTTP响应头是用来给浏览器 指示允许一个页面 可否在 <frame> <iframe> <embed>或者<object>中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 点击劫持攻击。

frame标签:框架标签,放置一个HTML文档(页面)

iframe标签:内联框架标签,在一个HTML页面中显示(插入)另一个HTML页面

embed标签:音频元素标签,插入一个音频元素

object标签:定义外部内容的容器标签

  • 语法:

    DENY:表示该页面不允许在frame中展示,即便在相同域名的页面中嵌套也不可以。

    SAMEORLGIN:表示该页面可以在相同域名页面的frame中展示

    ALLOW - FROM:表示该页面可以在指定来源的frame中展示

    如果设置DENY,该页面在任何地方的frame中都无法加载;设置SAMEORLGIN那么就可以在同域名页面中的frame标签中嵌套并加载该页面

配置Web容器:

  • 配置Apache,所有页面上发送X-Frame-Options响应头,需要在site中配置如下:
Header always append X-Frame-Options SAMEORLGIN
  • 配置Nginx,所有页面上发送X-Frame-Options响应头,在http,server或者locationp配置中添加:
add_header X-Frame-Options SAMEORLGIN;
  • 配置IIS,在Web.config文件中添加:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORLGIN" />
</customHeaders>
</httpProtocol>
</system.webServer>

*具体的技术文档请参考:MDN_X-Frame-Options

MDN Web Docs 是一个提供 Web 技术和促进 Web 技术软件的不断发展的学习平台,包括:


X-Content-Type-Options:

X-Content-Type-Options HTTP响应首部相当于一个提示标志,服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探(防止用户修改MIME上传非法文件类型或利用解析来执行JavaScript……)行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题。

通过X-Content-Type-OptionsHTTP响应头可以禁止浏览器的类型猜测行为;

  • 语法:
X-Content-Type-Options:nosniff
  • 指令:(nosniff是固定的

    nosniff:(下面两种情况会被禁止

    ​ 请求类型style但是MIME类型不是text/css

    ​ 请求类型script但是MIME类型不是application/x-javascript


Access-Control-Allow-Origin:

Access-Control-Allow-Origin 响应头指定了该响应的资源是否被允许与给定的origin共享。跨原始资源共享(CORS)允许网站在它们之间共享内容,为了使网站之间安全的跨域获取资源,可以通过设置Access-Control-Allow-Origin来允许指定网站来跨域获取本地资源。

当目标页面的response中包含Access-Control-Allow-Origin这个header,并且value有对方的域名,浏览器才允许目标获取页面的数据。

只允许”10.10.10.10“访问自己本地资源

Access-Control-Allow-Origin: http://10.10.10.10
  • 语法

    Access-Control-Allow-Origin: *
    Access-Control-Allow-Origin: <origin>
  • 指令

    *

    对于不需具备凭证(credentials)的请求,服务器会以“*”作为通配符,从而允许所有域都具有访问资源的权限。

    <origin>

    指定一个可以访问资源的URL。


X-XSS-Protection:

HTTP X-XSS-Protection 响应头是Internet Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。虽然这些保护在现代浏览器中基本上是不必要的,当网站实施一个强大的Content-Security-Policy来禁用内联的JavaScript ('unsafe-inline')时, 他们仍然可以为尚不支持 CSP 的旧版浏览器的用户提供保护。

CSP:内容安全策略

​ 用于检测和减轻用于Web站点的特定类型的攻击,例如XSS和SQL注入;基于Content-Security-Policy实现策略

  • 语法:

    X-XSS-Protection: 0
    X-XSS-Protection: 1
    X-XSS-Protection: 1; mode=block
    X-XSS-Protection: 1; report=<reporting-uri>

    0

    禁止XSS过滤。

    1

    启用XSS过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。

    1;mode=block

    启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。

    1; report=<reporting-URI> (Chromium only)

    启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri指令的功能发送违规报告。


HTTP Strict Transport Security(HSTS):

HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP

一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。

这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。

网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。

注意: Strict-Transport-Security 在通过 HTTP 访问时会被浏览器忽略; 因为攻击者可以通过中间人攻击的方式在连接中修改、注入或删除它. 只有在你的网站通过HTTPS访问并且没有证书错误时, 浏览器才认为你的网站支持HTTPS 然后使用 Strict-Transport-Security 的值 .

  • 语法:

    Strict-Transport-Security: max-age=<expire-time>
    Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
    Strict-Transport-Security: max-age=<expire-time>; preload
  • 指令:

    max-age=<expire-time>

    设置在浏览器收到这个请求后的秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。

    includeSubDomains [可选]

    如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。

    preload [可选]

    查看 预加载 HSTS 获得详情。不是标准的一部分。

*HTTP Strict Transport Security(HSTS)参考文档


Content Security Policy*

CSP是一个计算机的安全标志,主要用来防止XSS、点击劫持、SQL注入等攻击;CSP通过定义运行加载脚本的位置和内容防止恶意代码的加载。

内容安全策略CSP技术文档

  • 用法:

    CSP由HTTP头的Content-Security-Policy定义,每一个HTTP请求最多返回一个CSP头部,格式:

    Content-Security-Policy:policy

小编安利:

一个Web开发技术的优秀文档技术网站:https://developer.mozilla.org/zh-CN/

最新文章

  1. socket(二)
  2. mongodb ubuntu下自启动
  3. x01.os.16: 添加功能
  4. 【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS
  5. mysql查询结果输出到文件
  6. MVP -----个人理解与示例(android例子 实现)
  7. tdd 和 make file,以及cygwin
  8. 通过beego快速创建一个Restful风格API项目及API文档自动化
  9. MongoDB创建用户
  10. cocospod 安装和使用
  11. 【转】C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
  12. Mysql账号管理
  13. Cookie 操作工具类
  14. Spark 读写hive 表
  15. MS SQL 批量给存储过程/函数授权
  16. koa2学习(二) 中间件router
  17. 关于Mysql6.0+的时区错乱问题
  18. python基础知识17---装饰器2
  19. Lumen与laravel的区别
  20. [转帖]Kerberos和NTLM - SQL Server

热门文章

  1. mac系统下docker安装配置mysql详细步骤
  2. BeautifulSoup模块的常用方法小结
  3. NTP服务编译安装报错:/usr/bin/ld: cannot find –lcap
  4. Java 大黑话讲解设计模式 -- UML类图
  5. OSI层次模型
  6. easywechat微信开发SDK之小微商户进件(一)
  7. 2019-2020-4 20199317《Linux内核原理与分析》第四周作业
  8. HOOK的类型
  9. JetBrains 迷你地图插件 CodeGlance
  10. Unity3d 与 Objective-C 数据交互,持续更新中