配置HTTP响应头提高Web安全

  • Post author:
  • Post category:其他




1 X-Frame-Options(点击劫持)



1.1 定义

**点击劫持(ClickJacking)**劫持的是用户的鼠标点击操作,劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等;

场景: 就比如通过修改偏移量,比如一个关闭按钮,有可能底下覆盖的是一个关注按钮

HTTP响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个iframe中的页面。如果服务器 响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置X- Frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。

  • 限制当前页面以frame或者iframe的方式引用



1.2 选项

1、DENY:不能被嵌入到任何iframe或者frame中。

2、SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中,域名+端口一致可以引用

3、ALLOW-FROM uri:只能被嵌入到指定域名的框架中 apache可配置http.conf如下:



1.3 nginx配置

  • 需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中
 add_header X-Frame-Options SAMEORIGIN;
# 正常情况下都是使用SAMEORIGIN参数,允许同域嵌套
add_header X-Frame-Options SAMEORIGIN;
# 允许多个域名iframe嵌套,注意这里是用逗号分隔
add_header X-Frame-Options "ALLOW-FROM http://whsir.com/,https://cacti.org.cn/";



1.4 建议配置

add_header X-Frame-Options SAMEORIGIN;



2. Cookie没有设置HttpOnly

  • 不让js操作cookie



3. cookie里的secure属性



3.1 简介

cookie的secure标志是一个选项,当应用服务器在http响应中向用户发送新cookie时,可以设置该选项 secure标志,目的是防止未经授权的方由于以明文形式传输cookie而获取到cookie。 为了实现这个目标, 支持secure标志的浏览器只会在请求转到https页面时发送带有secure标志的cookies。换句话说,浏览器 不会在未加密的http请求上发送设置了安全标志的cookie。 通过设置secure标志,浏览器将可以阻止通过 未加密通道传输cookie。 Secure属性是说如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务 器,用http协议是不发送的。换句话说,cookie是在https的情况下创建的,而且他的Secure=true,那么 之后你一直用https访问其他的页面(比如登录之后点击其他子页面),cookie会被发送到服务器,你无需重 新登录就可以跳转到其他页面。但是如果这是你把url改成http协议访问其他页面,你就需要重新登录了,因 为这个cookie不能在http协议中发送。



3.2 建议设置

  • 在nginx配置文件中可以使用proxy_cookie_path属性实现
proxy_cookie_path / "/; Path=/; Secure;";



4. HTTP Referrer-Policy



4.1 定义


https://blog.csdn.net/john1337/article/details/53665684

  • referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面;通过这个信息,我们可以知道访客是怎么来到当前页面的。这对于Web Analytics非常重要,可以用于分析不同渠道流量分布、用户搜索的关键词等。Referrer Policy即引用策略,就是从一个页面发出请求时,是否在请求头部定义 Referrer 的设置。很多网站的防盗链机制都是用头部定义 Referrer 来判断是否是盗链。referer有可能会泄露隐私,带来安全上的问题



4.2 选项


  • “no-referrer”

    : 整个


    Referer


    首部会被移除。访问来源信息不随着请求一起发送。


  • “no-referrer-when-downgrade”

    ,: :如果未设置referfer-policy,则会默认设置浏览器的预设值;在安全降级请求(https->hhtp),不发送请求头;跨源的请求,referer只包含源;同源请求: referer包含完整的url;建议设置成这个,防止因为浏览器变更预设值


  • “origin”

    , 在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。


  • “origin-when-cross-origin”

    : 对于同源的请求,

    会发送完整的URL作为引用地址

    ,但是对于非同源请求仅发送文件的源。


  • “same-origin

    “:对于

    同源的请求

    会发送引用地址,但是对于非同源请求则不发送引用地址信息。


  • “strict-origin”:

    在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。


  • “strict-origin-when-cross-origin”

    : 对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。chrome85改成了这个


  • “unsafe-url”

    :全部都发送Referrer信息。最宽松最不安全的策略。



4.3 建议设置

Referer Policy: strict-origin-when-cross-origin



5 Content-Security-Policy(网页安全政策)



5.1 简介:

  • 允许站点管理者控制用户代理能够为指定的页面加载哪些资源

  • 利用CSP来防止XSS攻击,CSP实质上就是白名单制度,实现与执行由浏览器来完成。

  • 启动CSP的方式:

    Content-Security-Policy

  • 第二种: 通过meta标签

    <meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
    <!--
    脚本:只信任当前域名
    <object>标签:不信任任何URL,即不加载任何资源
    样式表:只信任cdn.example.org和third-party.org
    框架(frame):必须使用HTTPS协议加载
    其他资源:没有限制
    -->
    
  • 启动后,

    不符合CSP的外部资源就会被阻止掉



5.2 资源加载限制

script-src:外部脚本
style-src:样式表
img-src:图像
media-src:媒体文件(音频和视频)
font-src:字体文件
object-src:插件(比如 Flash)
child-src:框架
frame-ancestors:嵌入的外部资源(比如<frame>、<iframe>、<embed>和<applet>)
connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
worker-src:worker脚本
manifest-src:manifest 文件


5.3 建议设置
Content-Security-Policy: default-src 'self'



6 X-Permitted-Cross-Domain-Policies



6.1 简介

用于指定当不能将“crossdomain.xml”文件(当需要从别的域名中的某个文件中读取Flash内容时用于进行必要设置的策略文件)放置在网站根目录等场合时采取的替代策略



6.2 设置值

 none :目标服务器上的任何位置(包括该主策略文件)均不允许使用策略文件。
 master-only: 只允许使用主策略文件(/crossdomain.xml)
 by-content-type: 仅允许Content-Type:text/x-cross-domain-policy提供的策略文件(只适用于HTTP/HTTPS)。
 by-ftp-filename :仅允许文件名为crossdomain.xml的策略文件。(只适用于FTP)
 all:允许此目标域中所有的策略文件。



6.3 建议配置

add_header X-Permitted-Cross-Domain-Policies ' master-only';



7 X-XSS-Protection



7.1 简介


X-XSS-Protection

头被用来设置浏览器提供的 XSS Filter 的状态,XSS Filter 可以用来对抗大部 分

反射型 XSS 漏洞

; 用于启用浏览器的 XSS 过滤功能,以防止 XSS 跨站脚本攻击.浏览器提供的XSS保护机制并不完美,但是开启后仍然可以提升攻击难度,总之没有特别的理由,不要关闭它。只对IE8和Safir浏览器生效。



7.2 可选值

0: 禁用 XSS Filter;
1: 启动;当发现反射型 XSS 攻击时,浏览器将自动清理攻击代码
1; mode=block,启用 XSS Filter,当发现反射型 XSS 攻击时, 浏览器将停止渲染当前页面 1; report=http://xxx.com/,当发现反射型 XSS 攻击时,浏览器将自动清 理攻击代码,并将攻击情况反馈到 http://xxx.com/(例如IE8中,检查到攻击时,整个页面会被一个#替换)
X-XSS-Protection: 1; report=<reporting-uri>: 启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri (en-US)指令的功能发送违规报告。



7.3 建议设置

X-XSS-Protection: 1; mode=block



8 X-Download-Options



8.1 定义

用于放置直接打开用户下载文件,

noopen

用于指定IE 8以上版本的用户不打开文件而直接保存文件。在下载对话框中不显示“打开”选项。



8.2 建议配置

X-Download-Options: noopen



9. X-Content-Type-Options



9.1 简介

  • 浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片,”text/css”是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。设置为nosniff这个响应头则可以禁用浏览器的类型猜测行为



9.2 建议设置

add_header X-Content-Type-Options 'nosniff';



版权声明:本文为weixin_42991716原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。