Web的安全问题越来越严重,漏洞总是在不停的出现,而我们以前一直在做的都是打补丁,就这样漏洞、补丁、补丁、漏洞的恶性循环着。其实很多的攻击都是可以预防的,只要我们做好前期的工作。
根据最新的统计显示,跨站脚本、信息泄漏和SQL注入这三个安全漏洞是最容易受到攻击的,而跨站脚本攻击XSS又在其中占了一半以上的份额,所以这里我们要谈谈如何做好基本的对付XSS的防御工作,让我们的Web环境更加安全。
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
我们先来了解一下XSS主要的攻击手段:
1、依赖跨站漏洞,需要在被攻击网站的页面种入脚本的手法,包括Cookie盗取,通过javascript获取被攻击网站种下的cookie,并发送给攻击者,从cookie中提取密码等隐私,利用cookie伪造session,发起重放攻击。另外还有包括Ajex信息盗取,通过javascript发起ajex请求,从ajex结果中获取隐私,模拟用户完成多页表单。
2、不依赖跨站漏洞的手法,包括单向HTTP动作,通过img.src等方法发起跨站访问,冒充被攻击者执行特权操作。但是很难拿到服务器的返回值。还包括双向HTTP动作,如果服务器产生一段动态的script,那么可以用script.src的方法发起跨站访问并拿到服务器的返回值。
下面看看具体的防御措施:
1、防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句
不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细检查长度和对””,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把html tag弄出来。这一个层面做好,至少可以堵住超过一半的XSS攻击。
2、Cookie防盗
首先避免直接在cookie中泄露用户隐私,例如email、密码等等。其次通过使cookie和系统ip绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,不可能拿来重放。
3、尽量采用POST而非GET提交表单
POST操作不可能绕开javascript的使用,这会给攻击者增加难度,减少可利用的跨站漏洞。
4、严格检查refer
检查http refer是否来自预料中的url。这可以阻止第2类攻击手法发起的http请求,也能防止大部分第1类攻击手法,除非正好在特权操作的引用页上种了跨站访问。
5、将单步流程改为多步,在多步流程中引入效验码
多步流程中每一步都产生一个验证码作为hidden表单元素嵌在中间页面,下一步操作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。首先这为第1类攻击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能发起下一步请求,这在第2类攻击中是几乎无法做到的。
6、引入用户交互
简单的一个看图识数可以堵住几乎所有的非预期特权操作。
7、只在允许anonymous访问的地方使用动态的javascript。
8、对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
9、内部管理网站的问题
很多时候,内部管理网站往往疏于关注安全问题,只是简单的限制访问来源。这种网站往往对XSS攻击毫无抵抗力,需要多加注意。
虽然XSS的攻击很灵活,只要我们能做好上述几点,是可以组织大部分XSS的,再及时打好补丁可以最大程度的减少来自跨站脚本攻击XSS的威胁。