蓝盟诗人[LUC]蓝客联盟

忘记密码

解析跨站脚本攻击与跨站请求伪造之道

2010-09-29 13:40 作者: 来源: 本站 浏览: 1,238 views 我要评论 字号:

这里谈到的跨站漏洞利用包括跨站脚本攻击、跨站请求伪造以及其它的同源攻击,这些攻击都是目前极普遍的攻击方式。这篇文章可供Web开发人员阅览,也可供网站管理员参考。

同源策略最初是随着网景公司的浏览器发布的,它的主要作用是规定浏览器和相关的编程语言应当如何处理安全问题。这种策略的主旨在于限制一个网站访问其它网站上的函数,同时又允许网站自由地控制URI上的代码源。换句话说,仅准许脚本能够处理同一域名上的其它脚本、80端口和协议。

同源攻击主要涉及几种攻击方式:跨站脚本攻击、跨站请求伪造、跨站请求跟踪、网站缓存投毒、HTTP响应Splitting、HTTP请求Smuggling、HTML和JavaScript网络扫描。

跨站脚本攻击

跨站脚本攻击是一种准许将恶意代码注入到网页中的安全漏洞。这种攻击主要用于:

A、钓鱼或者cookie窃取,目的是为了访问受限信息。

B、为了恶搞、丑化其它网站或实施社交工程攻击

C、在网站的客户端上执行恶意代码

这种攻击可以通过利用IMG标记来实施破坏或恶搞,如关闭用户浏览器的窗口,然后打开一个既无菜单也无工具栏的窗口,并播放一些恶搞性的声音。

1、攻击原理及类型

那么,这种攻击是如何进行的呢?总体说来,它分为两种类型:其一是反射式攻击,这种攻击跟踪网站通过cookies进行的身份验证,这种网站一般都不太安全,容易遭受跨站脚本攻击。使用社会工程(如告诉用户“你中奖了!”),如果目标用户受到诱骗,并单击攻击者注入到标准HTML代码中的包含恶意代码的链接,攻击者就可以访问用户的cookie信息(会话和身份验证信息等)。其二是存储式攻击,其原理是:假设某个网站利用后端数据库作为搜索网页的信息源,黑客们并不将恶意代码注入到普通页面中,而是将SQL代码注入到这种数据库中。于是,每次从后端数据库中返回查询结果时,都会包含着攻击者的恶意代码。可以想像,这种攻击并不是针对哪个客户端,而是感染整个论坛的用户组,并感染大量的容易轻信的受害者。

2、防范措施最重要的是要保护代码。

你应当限制用户输入信息的显示,实施过滤,仅显示绝对需要的信息。建议你验证并清理所有形式的数据、数据源,以及你无法直接控制的URL参数。

一个很实用的技巧是用HTML实体(如&)来代替特别字符。为了减少特定HTML字符的数量,你必须限制用户输入,仅准许用于网站的合法代码段。例如,许多论坛通过运用{b}标记让用户输入大写字符,但是典型情况下,这些站点并不准许你增添加自己的表单,所以不应当准许表单。此外,如果这些标记有特定的语法和值,那么你应当仅准许与其语法保持一致的值(例如,字体颜色是一个仅包含字母A-F或数字0-9的三个或六个字符的值,所以,如果你准许用户输入整个SQL语句,那么事情就糟了。)

此外,多数清理例程会用标记来替换回车符和换行符,以及一些有害的单词,如“script”,这虽然依赖于具体的应用程序,但是许多网站有理由使用这种单词,所以这些措施很难普及。

下面给出几个不安全的例子:

Python的例子:

print "<script>alert('xss');</script>"

ASP的例子:

<%= "<script>alert('xss');</script>" %>

将这种文本直接写到HTML中会导致:

<script>alert('xss');</script>

这里你可以看到的是合法的HTML,所以会得到处理:

下面给出几个较安全的例子:

Python:

print cgi.escape("<script>alert('xss');</script>")

ASP:

<%= HTMLEncode(“<script>alert('xss');</script>”) %>

跨站请求伪造

跨站请求伪造是另一种同源策略攻击,它的目的是为了欺骗受害者加载一个包含恶意请求的网页,要求用户输入其账户及口令等。这种欺骗依赖于用户对其身份信息的信任。用户一般会认为他们只是在执行不同的任务,只不过是使用一种HTTP请求。攻击者借用用户自己的浏览器将攻击发送给目标站点。

1、跨站请求伪造的原理

首先,攻击者将达到恶意站点的链接发布到目标站点上,然后,就会有一些轻信的用户浏览恶意网站,从而成为受害者,更有甚者,会成为其帮凶。在用户受到诱骗将表单提交给原始的目标网站(最初被植入恶意链接的网站)时,用户就会成为攻击者的帮凶。因为用户已经通过了身份验证,所以目标网站会接受表单提交请求,并准许修改敏感数据,如用户自己的口令或从网站上获取关键的信息。

2、保护代码

首先,要通过检查REQUEST链接请求来限制对POST或Web应用程序的访问。

注意:有些浏览器会有一个空的链接请求,这也应当被阻止。

因而,相互认证一般情况下是令牌化认证的请求,即如果数据包含着一个适当的机密值,才可以接受粘贴数据。而且通过实行多个步骤的写入过程或确认页面会强化这种安全机制。

总结

同源策略是一个在多数浏览器中实施的概念,但它可被XSS攻击利用(它利用了一个用户对于某个网站或应用程序的信任),也可被XSRF利用(它利用了网站或应用程序对用户的信任)。

那么,我们的策略简单地说就是:绝不相信任何人!

不妨将信任看做是一个双向的街道:你永远不会知道哪个方向会出现车流。任何人都可以潜入到信任关系的中间,并滥用这种信任关系。

因而,我给出如下要点:

1、保护你的代码和客户端:对所有的远程数据输入都进行验证或过滤。

2、警告用户不要随意浏览,要教育用户能够确切地知道自己正在被导航到哪里。

打印
分享到:
复制链接

发表评论

*

* (保密)

Ctrl+Enter 快捷回复

会员登录关闭

记住我 忘记密码

注册会员关闭

小提示: 您的密码会通过填写的"电子邮箱"发送给您.

/** **/