跨站脚本攻击深入解析:跨站危害及cookie盗窃(4)
作者:康凯 来源:asp之家 发布时间:2009-12-24 17:12:00
八、促使用户单击注入的HTML代码
利用“免费 * ”以及“ * 甩卖”来引诱别人已经成为过去,现在,攻击者通常会促使用户去做一些普通大众经常做的事情,诸如单击一个新闻链接、欣赏一副可爱的小猫的图片等等,当然使用的方法在前面我们已经说过了。
例如,快到情人节了,大多数年轻人都希望给爱人一个惊喜。攻击者就会考虑利用“阅读本文以了解如何您的爱人一个与众不同的情人节”之类的文字来诱惑用户单击链接。借助于XSS蠕虫,如果人们看到这封邮件来自其好友的话,那么人们会毫不犹豫地点击它。
然而,攻击者放入的文字越多,越容易引起潜在受害者的疑虑。现今,最有效的信件应当只发给潜在的受害者一个链接,而根本不附加任何文字。好奇是人类的本性,在这种强烈的本能的驱使下,点击该链接将大有人在。
至此,攻击手法的介绍已经告一段落,下面开始简要介绍针对跨站脚本攻击的防御措施。
九、防御跨站点脚本攻击
为了防御XSS攻击,开发人员必须谨慎处理由用户提供的并且又反过来提供给用户的那些数据。这里所说的“用户提供的数据”应该定义为所有从外部网络连接发送给Web应用程序的那些数据。
它可以是登录时用HTML表单提交的用户名,一个后台的Ajax请求、一封电子邮件、乃至http报头。要把所有这些数据都看作是从外部网络连接进入Web应用程序的有潜在危险的数据。
对于所有由用户提供的随后又通过HTTP应答(诸如Web页面以及AJAX响应(HTTP响应码200)、页面未找到错误(HTTP响应码404)、服务器错误(类似的HTTP 响应码502)、重定向(例如HTTP 响应码302,等等)回显给用户的那些数据,开发人员必须采取下列措施之一:
对数据进行正确地转义处理,以保证它们不会被解释为HTML代码(对浏览器而言)或者XML代码(对Flash而言)。
删除会被恶意使用的字符串或者字符
一般情况下,删除一些字符会对用户体验造成影响,举例来说,如果开发人员删除了上撇号(’),那么对某些人来说就会带来不便,如姓氏中带有撇号的人,他们的姓氏就无法正常显示。同时,严禁开发人员删除字符串,因为完全可以通过许多不同的形式来表示字符串。应用程序和浏览器会对字符串作出不同的解释。例如,SAMY蠕虫利用了IE不把换行符作为定界符字符这一事实,因此,IE看来JavaScript和jav%0dascr%0dipt是一回事。遗憾的是,MySpace把换行符解释为字的分界符号,并允许将向Samy(及其他人)的MySpace页面中放入下列内容:
〈 div id=“mycode” expr=“a_lert(‘1’)” style=“background:url(‘javascript:eval(document.all.mycode.expr)’)”〉〈/div〉
我们建议对所有用户提供的又被发回给Web浏览器的数据都进行转义处理,包括AJAX调用、移动式应用、Web页面、重定向等等内的数据。然而,对字符串进行转义处理并不是我们想得那么简单:您必须根据用户提供的数据将被放到HTTP应答中的具体位置来决定使用URL编码、HTML实体编码或者JavaScript编码进行转义。
十、防范基于UTF-7的XSS
基于UTF-7的攻击是很容易防范的,只要强制指定在HTTP报头中的或者HTML响应内部的字符编码即可。我们建议对默认HTTP报头做如下设置:
Content-Type: text ml; charset=utf-8
还应当对全部HTML响应添加下列限制:
《 meta http-equiv=“Content-Type” content=“text ml;charset=utf-8” 》
十一、结束语
在浏览器中已经建立了一些安全措施——即同源策略和Cookie安全模型。此外,一些浏览器插件,诸如Flash Player、Outlook Express 以及Acrobat Reader等,带来了更多的安全问题和安全措施。然而,如果攻击者可以强迫用户执行源自特定域的JavaScript的话,这些额外的安全措施总是倾向于削弱同源策略的力量。
跨站点脚本攻击(XSS)技术能够强迫用户执行攻击者以受害者名义在某个域上选择的脚本,如JavaScript、VBScript、ActionScript,等等。XSS要求某个域上的Web应用程序能够提供(即供应、返回)被攻击者所控制的字符。因此,攻击者可以向页面注入代码,而这些代码将来会在这个有弱点的域的上下文中执行。本文详细介绍跨站脚本的危害,以及攻击者是如何诱骗受害者的。最后介绍针对跨站脚本攻击的防御措施。至此,读者已经能够对跨站脚本攻击有一个全面深入的了解了。


猜你喜欢
- 自己也是菜鸟一个(文中若有错误之处欢迎各位大虾们指出)但还是希望能将我自己的一些作站经历写出来,为广大菜鸟朋友们做一些参考。试验目的:在只有
- 几年前站长做网站的时候只需要考虑Woindows和IE 5.0,网页的分辨率大多是800*600和1024*768,所以对于网站设计来说相对
- WordPress留言链接重定向跳转,主要是对百度来做的,因为WordPress留言默认的用rel='external nofoll
- 在本系列的第一节中,讲了提高网站性能中网站“内容”有关的10条原则。除了在网站在内容上的改进外,在网站服务器端上也有需要注意和改
- 一.摘要所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介
- 昨日晚间,有消息人士向计世网透露说,分众传媒董事长江南春近日将出任央视三维CEO一职。在过去三年整合了全国44个城市的200多家高端影院,1
- 一. 在卸载VMware虚拟机之前,要先把与VMware相关的服务和进程终止1. 在windows中按下【Windows键】,搜索【服务】设
- 上一讲我们介绍了帝国cms采集基本流程,那么我们这一讲介绍帝国cms如何采集内容分页。不少的同学在采集过程中,列表页和内容页都能可以很好地设
- Google自从发布了Google分析(Google Analytics)中的AdSense工具后,只要将将AdSense帐号和Analyt
- 注意:入侵时目标如果是linux服务器,看切忌清理痕迹的时候别忘记history命令的记录哦!1、修改/etc/profile将HISTSI
- 解决fatal:remote error:You can't push to git://github.com/username/*
- 又是一个黎明的到来,我已经数不清有多少个这样的黎明是在我坐在电脑面前来临的。仔细一想,我进入站长这圈子已经有1年多了。 
- 连接到你的独立服务器,一般来说有两种方式:你可以使用一个基于网络的接口,如Plesk;或者你可以使用SecureShellprotocol(
- 通俗的说,虚拟主机是将一台(或者一组)服务器的资源(系统资源、网络带宽、存储空间等)按照一定的比例分割成若干台相对独立的&ldquo
- 这是一个让很多站长费解的问题,很多人认为投放了Google AdSense的站点就不允许进行推广了。不过觉得困惑我想也正常,因为Google
- 一些应用程序(例如很多.sh程序)如果想在Ubuntu中添加到Dash home中进行快速的启动,则需要找到/usr/share/appli
- 网站不仅仅只包含网页,有时你需要提供用户能下载的文件。将你的文件放到服务器上并在网页中附上链接只是第一步,你还需意识到HTTP响应的头文件影
- 感恩节是这两天的热点,《商业大亨》也为广大老板们准备了丰富的五大感恩节活动,让老板们玩的舒心。同时,为了让自由城内有更祥和的气氛,《商业大亨
- 在百度C2C产品“百度有啊”即将上线的时候,淘宝网站曾经屏蔽百度搜索爬虫,禁止百度搜索引擎抓取淘宝网站的网页内容,淘宝官方的解释是“杜绝不良
- 最近我在VMware上面用三台虚拟机搭建了一个hadoop的集群。但是后来发现了一个问题:每次重新打开三台机器的时候,因为主机所连接的网络的