XSS(Cross Site Script)跨站脚本攻击。它指的是恶意攻击者往Web 页面里插入恶 意html 代码,当用户浏览该页之时,嵌入其中Web 里面的html 代码会被执行,从而达到侵害用户信息目的。
原理:
攻击者先构造一个跨站页面,利用 script、<IMG>、 <IFRAME>等各种方式使得用户浏览这个页面时, 触发对被攻击站点的http 请求。如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为 被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。
分类:
XSS漏洞分类:
本地漏洞(DOM-based or local):漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:
- Alice给Bob发送一个恶意构造的Web URL。
- Bob点击并查看了这个URL。
- 恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。
- 具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。
- Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。
反射式漏洞( Reflected ):Web客户端使用Server端脚本生成页面为用户提供数据时【来自页面参数 window.location.search】,如果 未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。其攻击过程如下:
- Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信 息)。
- Charly发现Bob的站点包含反射性的XSS漏洞。
- Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
- Alice在登录到Bob的站点后,浏览Charly提供的URL。
- 嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然 后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。
存储式漏洞(Stored):该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞【来自服务端返回值(该值可由用户构造)】,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能。其攻击过程如下:
- Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
- Charly注意到Bob的站点具有类型存储式的XXS漏洞。
- Charly发布一个热点信息,吸引其它用户纷纷阅读。
- Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。
XSS跨站攻击三部曲
防御:
1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句
不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细检查长度和 对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以 encode 。
2. Cookie 防盗
首先避免直接在cookie 中泄露用户隐私,例如email、密码等等。
其次通过使 cookie 和系统ip 绑定来降低cookie 泄露后的危险。
3. 尽量采用POST 而非GET 提交表单
POST 操作不可能绕开javascript 的使用,这会给攻击者增加难度,减少可利用的跨站漏洞。
4. 严格检查refer
检查http refer 是否来自预料中的url。这可以阻止第2 类攻击手法发起的http 请求,也能防止大部分第1 类攻击手法,除非正好在特权操作的引用页上进行了跨站访问。
5. 将单步流程改为多步,在多步流程中引入效验码
多步流程中每一步都产生一个验证码作为hidden 表单元素嵌在中间页面,下一步操作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。首先这为第1 类攻击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能发起下一步请求,这在第2 类攻击中是几乎无法做到的。
6. 引入用户交互
简单的一个看图识数可以堵住几乎所有的非预期特权操作。
7. 只在允许匿名访问的地方使用动态的javascript。
8. 对于用户提交信息的中的img 等link,检查是否有重定向回本站、不是真的图片等可疑操作。
9.文件上传时,注意检查文件头以确认文件类型是否符合合法的安全类型,如上传文件要求是图片类型,不能只检查文件后缀。
10.对于用户上传的文件,不允许直接提供静态访问方式,在用户访问时,必须对文件进行鉴权,鉴权后,通过文件流的方式输出