《白帽子讲Web安全》5-6章

《白帽子讲Web安全》5-6章

5、点击劫持(ClickJacking)

5.1、什么是点击劫持

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

有些环境下明明点击了对应的内容,却跳转到莫名其妙的地方,应该就是被点击劫持了。

5.2、Flash点击劫持

攻击者制作了一个Flash游戏,诱使用户去点击“CLICK”按钮,每次点击后这个按钮的位置都会发生变化。游戏中的某些点击是有意义的,某些点击是无效的。攻击通过诱导用户鼠标点击的位置,能够完成一些较为复杂的流程。

5.3、图片覆盖攻击

  • 一名叫sven.vetsch的安全研究者最先提出了这种Cross Site Image Overlaying攻击,简称XSIO。sven.vestsch通过调整图片的style使得图片能够覆盖在他所指定的任意位置。
  • 在防御XSIO时,需要检查用户提交的HTML代码中,<img>标签的style属性是否可能导致浮出。

5.4、拖拽劫持与数据窃取

  • Drag & Drop的API使得用户的操作更简单,拖拽对象可以是链接,也可以是文字,还可以从一个窗口推拽到另一个窗口,因此拖拽是不受同源策略限制的。
  • “拖拽劫持”的思路是诱使用户从隐藏的不可见iframe中“拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。

Q:书中提到在小球和小海豹头顶都有隐藏的iframe。是把iframe展示为图片吗,因为如果是iframe和图片分开的话,拖到iframe就不能拖到图片了,这样用户会感到奇怪。
A:提示用户使用ctrl+a来选中小球,也就是选中小球和其隐藏的iframe。

5.5、ClickJacking3.0:触屏劫持

到了2010年9月,智能手机上的“触屏劫持”攻击被斯坦福的安全研究者公布,这意味着ClickJacking的攻击方式更进一步。安全研究者将这种触屏劫持称为TapJacking。

5.6、防御ClickJacking

针对传统的ClickJacking,一般是通过禁止跨域的iframe来防范。

5.6.1、frame busting

通过写一段JavaScript代码来禁止iframe的嵌套,但是frame busting也存在一些缺陷。由于它是用JavaScript写的,控制能力并不是特别强,因此有许多方法可以绕过它。比如针对parent.location的frame busting,就可以采用嵌套多个iframe的方法绕过。假设frame busting代码如下:

if (top.location != self.llocation){
	parent.location = self.location;
}

那么可以通过以下方式即可绕过上面的保护代码:

Attacker top frame:
<iframe src="attackerr.html">
Attacker sub-frame:
<iframe src="http://www.victim.com">

斯坦福的Gustav Rydstedt等人总结了一篇关于“攻击frame busting”的paper:“Busting frame busting: a study of clickjacking vulnerabilities at popular sites”,详细讲述了各种绕过frame busting的方法。

5.6.2、X-Frame-Options

X-Frame-Options 是一个 HTTP 响应头,用于指示浏览器是否允许一个页面在 <frame><iframe><embed><object> 中显示。它主要用于防止点击劫持(clickjacking)攻击。

可选值

  1. DENY:

    • 页面不能在任何框架中显示,无论是同源还是跨源。
  2. SAMEORIGIN:

    • 页面只能在同源的框架中显示。
  3. ALLOW-FROM origin(某些浏览器已弃用):

    • 页面可以在指定来源的框架中显示,但现代浏览器已不再支持此指令。

除了X-Frame-Options之外,Firefox 的“Content Security Policy”以及Firefox的NoScript扩展也能够有效防御ClickJacking,这些方案为我们提供了更多的选择。

  • Content-Security-Policy HTTP 响应头中的 frame-ancestors 指令可以替代 X-Frame-Options,并提供更强大的控制。

5.7、小结

ClickJacking 相对于XSS 与CSRF来说,因为需要诱使用户与页面产生交互行为,因此实施攻击的成本更高,在网络犯罪中比较少见。但ClickJacking在未来仍然有可能被攻击者利用在钓鱼、欺诈和广告作弊等方面,不可不察。

6、HTML5安全

HTML,全称为超文本标记语言(HyperText Markup Language),是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的内容和结构。其主要特点包括:

  1. 简易性:HTML语法简单,易于学习和使用。
  2. 可扩展性:可以通过添加新的标签和属性来扩展功能。
  3. 平台无关性:HTML文件可以在不同的操作系统和浏览器中显示。

HTML文档由一系列标签组成,这些标签可以描述文字、图像、链接、表格等内容。例如,<p>标签用于定义段落,<a>标签用于创建超链接等。

6.1、HTML5新标签

6.1.1、新标签的XSS

HTML5中新增的一些标签和属性,使得 XSS等Web攻击产生了新的变化,为了总结这些变化,有安全研究者建立了一个HTML5 Security Cheatsheet项目

6.1.2、iframe的sandbox

在HTML5中,专门为iframe定义了一个新的属性,叫 sandbox。使用sandbox这一个属性后,<iframe>标签加载的内容将被视为一个独立的“源”(源的概念请参考“同源策略”),其中的脚本将被禁止执行,表单被禁止提交,插件被禁止加载,指向其他浏览对象的链接也会被禁止。

sandbox有几个属性值:

  1. allow-same-origin:允许同源访问;
  2. allow-top-navigation:允许访问顶层窗口;
  3. allow-forms:允许提交表单;
  4. allow-scripts:允许执行脚本。
6.1.3、Link Types: noreferrer

Referer 头信息是HTTP请求头的一部分,用于指示当前请求的来源页面。当用户点击一个链接或提交表单时,浏览器会在请求头中包含 Referer 信息,告诉目标服务器用户是从哪个页面跳转过来的。主要用途有:

  1. 流量分析:网站可以通过 Referer 头信息了解用户的访问路径,进行流量分析和优化。
  2. 安全性:有些网站会根据 Referer 头信息来限制资源的访问,例如防止图片盗链。
  3. 调试和日志记录:开发者可以使用 Referer 头信息进行调试和日志记录,了解用户的行为路径。

示例如:
假设用户在 page1.html 上点击了一个链接,跳转到 page2.html,那么 page2.html 的请求头中会包含如下信息:

Referer: https://example.com/page1.html

虽然 Referer 头信息有很多有用的用途,但它也可能泄露用户的隐私信息。因此,浏览器和开发者可以使用 noreferrerReferrer-Policy 来控制 Referer 头信息的发送。

这里想到了CSRF的防御方法之一是开启Referer头信息验证

6.1.4、Canvas的妙用
  • <canvas>标签让JavaScript可以在页面中直接操作图片对象,也可以直接操作像素,构造出图片区域。
  • Canvas提供的强大功能,甚至可以用来破解验证码。Shaun Friedle 写了一个 GreaseMonkey的脚本通过JavaScript 操作 Canvas 中的每个像素点,成功地自动化识别了 Megaupload提供的验证码。大致过程如:
    • 首先将图片导canvas,并进行转换;
    • 分隔不同字符;
    • 将字符从背景中分离出来,判断背景颜色即可;
    • 再将结果重新绘制。

6.2、其他安全问题

6.2.1、Cross-Origin Resource Sharing

Cross-Origin Resource Sharing(CORS)是一种基于HTTP头的机制,允许服务器声明哪些源站可以访问其资源,从而解决了浏览器的同源策略限制。

超文本传输协议(Hyper Text Transfer Protocol, HTTP)用于在Web浏览器和Web服务器之间传输数据。HTTP请求方法定义了Web浏览器如何向Web服务器发送请求,常用的方式有GET与POST:

  • GET 方法

    • 用途:GET方法用于从服务器请求数据。它通常用于获取资源,例如网页内容或API数据。
    • 参数传递:GET请求的参数通过URL传递,格式为?key1=value1&key2=value2
    • 安全性:由于参数包含在URL中,GET请求不适合传输敏感数据(如密码),因为URL可能会被记录在浏览器历史记录或服务器日志中。
    • 缓存:GET请求可以被缓存,这意味着相同的请求可以从缓存中获取数据,而不需要每次都向服务器发送请求。
    • 长度限制:GET请求的URL长度有限制,通常为2048个字符。
    • 幂等性:GET请求是幂等的,多次执行相同的GET请求不会改变服务器的状态。
  • POST 方法

    • 用途:POST方法用于向服务器发送数据,通常用于提交表单或上传文件。
    • 参数传递:POST请求的参数包含在请求体中,而不是URL中,这使得它更适合传输大量数据或敏感数据。
    • 安全性:POST请求比GET请求更安全,因为参数不会显示在URL中,但仍需通过HTTPS确保数据传输的安全性。
    • 缓存:POST请求不会被缓存,每次请求都会发送到服务器并处理。
    • 长度限制:POST请求对数据长度没有限制,可以传输大量数据。
    • 非幂等性:POST请求不是幂等的,多次执行相同的POST请求可能会导致服务器状态的变化,例如创建多个相同的资源。
特性GETPOST
用途请求数据发送数据
参数传递URL请求体
安全性不适合敏感数据传输相对更安全,但需HTTPS
缓存可以被缓存不会被缓存
长度限制有限制(通常2048字符)无限制
幂等性
可见性参数在URL中可见参数在请求体中不可见
6.2.2、postMessage——跨窗口传递消息
  • postMessage 允许每一个 window(包括当前窗口、弹出窗口、iframes等)对象往其他的窗口发送文本消息,从而实现跨窗口的消息传递。这个功能是不受同源策略限制的。
  • 在使用postMessage()时,有两个安全问题需要注意。
    (1)在必要时,可以在接收窗口验证 Domain,甚至验证URL,以防止来自非法页面的消息。这实际上是在代码中实现一次同源策略的验证过程。
    (2)在本例中,接收的消息写入textContent,但在实际应用中,如果将消息写入innerHTML,甚至直接写入script 中,则可能会导致 DOM based XSS的产生。根据“Secure By Default”原则,在接收窗口不应该信任接收到的消息,而需要对消息进行安全检查。

使用 postMessage 的两个窗口需要满足以下要求:

  1. 窗口引用:发送消息的窗口需要能够引用接收消息的窗口。例如,通过 window.open 打开的窗口,或 iframe 的 contentWindow 属性。

  2. 协议、主机和端口:虽然 postMessage 可以跨域通信,但为了安全起见,通常建议两个窗口使用相同的协议(如 HTTPS)、主机和端口。这有助于确保消息的来源是可信的。

  3. 目标源(targetOrigin):在调用 postMessage 时,必须指定目标窗口的源(协议、主机和端口)。这可以通过 targetOrigin 参数来实现。使用 "*" 表示不限制目标源,但这可能会带来安全风险。

  4. 事件监听:接收消息的窗口需要添加事件监听器来处理 message 事件。

  5. 安全验证:接收消息时,始终验证 event.origin 以确保消息来自可信任的源,并验证消息内容的格式和数据,以防止恶意代码注入。

新技术的产生势必会带来新的安全问题

6.2.3、Web Storage

Web Storage(网页存储)是一种由HTML5引入的API,用于在用户的浏览器中存储数据。它提供了比传统的cookie更直观和高效的存储方式。Web Storage包括两种主要机制:localStoragesessionStorage

  • localStorage

    • 持久性:数据会一直保存在浏览器中,直到被显式删除,即使浏览器关闭后数据仍然存在。
    • 存储容量:通常比cookie大,约为5MB(不同浏览器可能有所不同)。
    • 使用场景:适用于需要长期保存的数据,例如用户设置、偏好等。
  • sessionStorage

    • 持久性:数据仅在页面会话期间有效,当浏览器或标签页关闭时,数据会被清除。
    • 存储容量:与localStorage相同,约为5MB。
    • 使用场景:适用于需要在单个会话中保存的数据,例如临时表单数据、会话状态等。

Web Storage 让 Web开发更加的灵活多变,它的强大功能也为XSS Payload大开方便之门。攻击者有可能将恶意代码保存在Web Storage 中,从而实现跨页面攻击。

Web Storage和Cookie主要区别:

区别Web StorageCookie
大小限制一般为5MB或更多每个Cookie的大小通常限制在4KB以内
数据传输数据仅存储在客户端,不会随每次请求发送到服务器每次请求都会将Cookie发送到服务器
用途用于存储大量数据,适合需要在客户端持久化存储的数据主要用于会话管理、用户跟踪和存储用户偏好
存储位置仅存储在浏览器中,不会自动传输到服务器存储在浏览器中,并且可以通过HTTP头部在客户端和服务器之间传输
适用场景适用于需要在客户端存储大量数据的场景,如离线应用数据适用于需要在客户端和服务器之间传递少量数据的场景,如用户登录状态

6.3、小结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>