HTTP攻击与防范 |XSS-简介
Posted 电脑趣事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP攻击与防范 |XSS-简介相关的知识,希望对你有一定的参考价值。
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,
当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。
XSS原理图
跨站脚本攻击(cross-site scripting,XSS)
发生在客户端,恶意代码在服务器上,用户点击此链接,恶意代码注入浏览器,从而达到攻击效果。
跨站攻击多是窃取cookie的信息。
XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式。
因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决。
那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了有针对性的具体实例分析。
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的html代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
为了与层叠样式表(Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。
XSS原理
(1)嵌入非法的html标签;
(2)嵌入javascript;
(3)flash的actionscript脚本。注入的标签和脚本都在客户端浏览器执行。
XSS实例
攻击者给查询参数q增加了恶意构造的值(跨站代码:http://www.a.cn?q=<script>alert(document.cookie)<script>)
如果服务端在返回的结果页面中,将用户提交的内容进行了原样的显示,那么访问这个链接时会弹出你的Cookie信息.
XSS危害:(1)钓鱼欺骗;(2)网站挂马;(3)身份盗用;(4)xss蠕虫。
XSS解决方案
(1)假定所有输入出都是可疑的。对http请求头部的变量,cookie中的变量检查。
(2)验证数据的类型,格式,长度,范围和内容。
(3)在服务器端过滤。
XSS跨站脚本攻击的分类及类型
根据XSS跨站脚本攻击存在的形式及产生的效果,可以将其分为以下三类。
一、 反射型XSS跨站脚本攻击,非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
反射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式,该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。
由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
二、 存储型XSS跨站脚本攻击,也称为持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。
存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。
如流行的Bo-Blog程序的早期版本中存在对用户提交评论数据过滤不严导致的XSS跨站脚本攻击漏洞,黑客可以在文章评论中提交插入恶意数据的UBB代码,
提交后,Bo-Blog程序会将数据保存至数据库中,当用户浏览该日志时,就会执行插入的恶意代码,如图所示。
三、 基于DOM的XSS跨站脚本攻击,DOM跨站(DOM XSS):DOM(documentobject model文档对象模型),客户端脚本处理逻辑导致的安全问题。
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。
不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
基于DOM的XSS漏洞
反射型和保存型XSS漏洞都表现出一种特殊的行为模式,其中应用程序提取用户控制的数据并以危险的方式将这些数据返回给用户。
第三类XSS漏洞并不具有这种特点。在这种漏洞中,攻击者的JavaScript通过以下过程得以执行。
用户请求一个经过专门设计的URL,它由攻击者提交,且其中包含嵌入式JavaScript。
服务器的响应中并不以任何形式包含攻击者的脚本。
当用户的浏览器处理这个响应时,上述脚本得以处理。
这一系列事件如何发生呢?由于客户端JavaScript可以访问浏览器的文本对象模型(Document Object Model,DOM),因此它能够决定用于加载当前页面的 URL。
由应用程序发布的一段脚本可以从URL中提取数据,对这些数据进行处理,然后用它动态更新页面的内容。如果这样,应用程序就可能易于受到基于DOM的XSS攻击。
回到前面的反射型XSS漏洞中的示例,其中服务器端应用程序将一个URL参数值复制到一条错误消息中。
另一种实现相同功能的办法是由应用程序每次返回相同的静态 HTML,并使用客户端JavaScript动态生成消息内容。
例如,假设应用程序返回的错误页面包含以下脚本:
/
这段脚本解析 URL,提取出message参数的值,并把这个值写入页面的HTML源代码中。
如果按开发者预想的方式调用,它可以和前面的示例中一样,用于创建错误消息。
但是,如果攻击者设计出一个 URL,并以JavaScript代码作为message参数,那么这段代码将被动态写入页面中,并像服务器返回代码一样得以执行。
在这个示例中,前面示例中利用反射型XSS漏洞的相同URL也可用于生成一个对话框:
http://www.sql.com/error.php?message=<script>alert(\'\'xss\'\');</script>
利用基于DOM的XSS漏洞的过程如图所示。
与保存型XSS漏洞相比,基于DOM的XSS漏洞与反射型XSS漏洞有更大的相似性。
利用它们通常需要攻击者诱使一名用户访问一个包含恶意代码的专门设计的URL,并由服务器响应那个使得恶意代码得以执行的特殊请求。
但是,在利用反射型与基于DOM的XSS漏洞的细节方面,还存在一些重要的差异,这点我们在稍后讨论。
CSRF(Cross-site request forgery跨站请求伪造,也被称成为“oneclick attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
尽管听起来像跨站脚本(XSS), 但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
与XSS攻击 相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
以上是关于HTTP攻击与防范 |XSS-简介的主要内容,如果未能解决你的问题,请参考以下文章