如何配置Nginx的X-Fram-Options响应标头?

Nginx

1 基础知识

1.1 点击劫持

1.1.1 概念

– 点击劫持是一种通过诱骗用户点击不可见或伪装成其他元素的网页元素的攻击
– 点击劫持可能会导致用户无意中下载恶意软件、访问恶意网页、提供凭据或敏感信息、转账或在线购买产品

1.1.2 原理

– 点击劫持通过在用户看到的页面顶部iframe内显示一个不可见的页面或HTML元素来执行
– 用户认为他们点击的是可见页面,但实际上他们点击的是移调到顶部的附加页面不可见元素
– 不可见页面可能是恶意页面,可可能是用户不打算合法的页面-例如用户银行网站上授权转账页面

1.1.3 类型

– “Likejacking”,一种操纵Facebook“Like”按钮的技术,导致有用户“Like”到其他不喜欢的页面
– “Cursorjacking”,是一种将用户光标位置变更到另一个位置的技术。它利用Flash和Firefox漏洞(已修复)

1.1.4 案例


– 攻击者创建一个有吸引力的页面,承诺为用户提供免费的塔希提岛之旅
– 在后台攻击者如检查到用户已登录银行站点,则加载转账页并用查询参数将攻击者的银行信息插入表单
– 银行转账页面显示在免费礼物页面上方的隐藏iframe中,“确认转账”按钮与“接收礼物”按钮完全一致
– 用户访问该页面并单击“预定我的免费旅行”按钮
– 实际上,用户点击了不可见的ifram中的“确认转账”按钮并把钱转给了攻击者
– 用户被重定向到包含免费礼物的信息页面(不知道后台发生的事情)

1.1.5 破解方法

– 客户端方法,被称为“Frame Busting”,即用JavaScript代码禁止iframe的嵌套(容易被绕过)
– 服务器端方法,“X-Frame-Options”标头声明(专家推荐的有效方法)

1.2 X-Fram-Options相应标头

1.2.1 响应标头的介绍

– X-Frame-Options属于HTTP页面的响应标头
– X-Frame-Options允许内容发布者防止他们自己的内容被攻击者在不可见的框架中使用
– X-Frame-Options通过定义不同的标头值控制浏览器是否允许在<FRAME>或<IFRAME>标记内呈现页面

1.2.2 响应标头的选项

– 选项“DENY”,不允许任何域在框架中显示当前页面
– 选项“SAMEORIGIN”,允许当前页面显示在另一个页面框架中,但仅限于当前域
– 选项“ALLOW-FROM URI”,允许当前页面显示在框架中,但仅限于特定URI,例如“www.example.com/frame-page”

1.2.3 响应标头的局限性

– 跨网站启用SAMEORIGIN选项,“X-Frame-Options”标头需作为每个单独页面HTTP相应的一部分返回
– “X-Frame-Options”不支持域名白名单,因此他不适用于需要在他们之间显示框架内容的多域站点
– 每个页面只能使用一个选项,因此,同一个页面不可能在当前网站和外部网站上都显示为框架
– 并非所有浏览器都支持“ALLOW-FROM”选项
– “X-Frame-Options”在大多数浏览器中都是不推荐使用的选项

2 最佳实践

2.1 修改配置文件

server {
    #...
    proxy_hide_header X-Frame-Options;
    add_header X-Frame-Options "SAMEORIGIN" always;
    #...
}

增加配置后,你需要重载服务使配置生效,

systemctl reload nginx.service

2.2 确认配置

curl -I https://www.cmdschool.org

可见如下显示,

#...
X-Frame-Options: SAMEORIGIN
#...

参阅文档
===================

X-Frame-Options的介绍
————————-
https://www.imperva.com/learn/application-security/clickjacking/

Nginx配置方法
—————–
https://stackoverflow.com/questions/47405597/x-frame-options-in-nginx-to-allow-all-domains

没有评论

发表回复

Nginx
如何解决https请求不安全http页被阻止问题?

1 前言 一个问题,一篇文章,一出故事。 笔者最近代理公司应用,发现https的页面有请求不安全的h …

Nginx
如何Nginx代理上游的子项目或文件夹?

1 前言 一个问题,一篇文章,一出故事。 笔者接到任务需要把Tomcat的其中一个应用号使用Ngin …

Nginx
如何安装部署RHEL 9 Nignx?

1 前言 一个问题,一篇文章,一出故事。 笔者需要基于RHEL 9部署Nginx环境,于是整理此文。 …