网站安全之XSS漏洞攻击以及防范措施
Posted Web手艺人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网站安全之XSS漏洞攻击以及防范措施相关的知识,希望对你有一定的参考价值。
最近在工作中碰到了一些安全相关的问题,在解决的同时也深感自己的欠缺,仔细研究了下xss 和 csrf 相关,进行了梳理,本期跟大家分享下xss 。
主要包括以下几个方面:
1、xss 原理,攻击目的?
2、xss 类型
3、检测及防御手段
一、xss 原理 及攻击目的
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为xss。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的(百科)。
简单来说,xss其实就是html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码,数据流程如下:攻击者的Html输入—>web程序—>进入数据库—>web程序—>用户浏览器,通过这种方式可以实现
盗用 cookie ,获取敏感信息
利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;请求接口获取数据等
利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
在访问量极大的一些页面上的xss可以攻击一些小型网站,实现DDoS攻击的效果。
二、xss类型
xss 主要包括三种类型,反射型xss,存储型xss,和DOM xss,除这三种以外,我们也简单看下XSF。
DOM xss:是出现在javascript代码中的xss漏洞。一般不经过后端,触发xss靠的是浏览器端的DOM解析。
常见情况:用户在input 标签内输入后,开发者不做任何处理实时显示在页面上。
攻击手段:攻击者直接在input 标签内输入特殊字符如 <script>alert(666)</script> 或者 / 等,导致页面错乱,或者反复弹窗,页面无法交互等。
反射型和存储型 xss 一般是服务器代码漏洞造成的。
反射型 xss:经过后端,不经过数据库。发出请求时,xss代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,xss代码随响应内容一起传回给浏览器,最后浏览器解析执行xss代码。这个过程像一次反射,故叫反射型xss。
常见情况:客户端请求接口,输入值未经任何过滤就直接输出的接口。
攻击手段:请求接口中带的参数包括xss 代码,提交到服务端后,服务端响应后,xss 代码回传,客户端接收到xss 代码后解析执行,导致被攻击。
存储型 xss:经过后端,经过数据库,存储型xss又被称为持久性xss,存储型xss是最危险的一种跨站脚本。存储型xss被服务器端接收并存储,当用户访问该网页时,这段xss代码被读出来响应给浏览器。反射型xss与DOM型xss都必须依靠用户手动去触发,而存储型xss却不需要。
常见情况:发布内容或者信息填写的接口,请求接口后根据接口回传的信息显示在浏览器上。 攻击者可以直接访问对应的服务端接口伪造数据,并插入xss 代码。
攻击手段,以内容发布为例:
添加正常的内容,使用开发者工具快速寻找显示标签
判断内容输出(显示)的地方是在标签内还是在标签属性内,或者在其他地方。如果显示区域不在HTML属性内,则可以直接使用xss代码注入。如果在属性内,需要先闭合标签再写入xss代码。
在插入xss 代码后,重新加载列表,若server 未做任何过滤,xss代码就会被浏览器执行。
XSF:XSF 通过ActionScript来加载第三方flash文件,攻击者如果对这个过程可控,那么他们就可以让目标flash加载恶意的flash文件,从而造成XSF攻击。XSF是基于ActionScript2/3.0语言的基础上。
其中,容易出现漏洞的方法包括
getURL
navigateToURL
ExternalInterface.call
ExternalInterface.call
htmlText
addcallback 等。
比如 ExternalInterface.call 方法中调用全局函数,攻击者通过覆盖全局函数等方法。通过 crossdomain 权限设置进一步获取更高权限;来请求数据或者伪造用户操作。
三、xss检测及防御手段
检测
a、手工检测
b、全自动检测xss:专门的xss扫描工具有:XSSER,XSSF等
防御手段:
1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。许多语言都有提供对HTML的过滤。
如:
php的htmlentities()或是htmlspecialchars()。 Python的cgi.escape()。 ASP的Server.HTMLEncode()。 ASP.NET的Server.HtmlEncode()
或功能更强的Microsoft Anti-Cross Site Scripting Library Java的xssprotect(Open Source Library)。 Node.js的node-validator。
2、使用HTTP头指定类型:
很多时候可以使用HTTP头指定内容的类型,使得输出的内容避免被作为HTML解析。如在PHP语言中使用以下代码:
header('Content-Type: text/javascript; charset=utf-8');
即可强行指定输出内容为文本/JavaScript脚本(顺便指定了内容编码),而非可以引发攻击的HTML。
3、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
4、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
参考资料:
1、XSS的原理与分类: http://blog.csdn.net/u011781521/article/details/53894399
2、xss 攻击手段: http://www.freebuf.com/articles/web/42727.html
3、XSS的原理分析与解剖:http://www.freebuf.com/articles/web/42727.html
4、对于XSS和CSRF你究竟了解多少:http://netsecurity.51cto.com/art/201407/446775.htm
以上是关于网站安全之XSS漏洞攻击以及防范措施的主要内容,如果未能解决你的问题,请参考以下文章