CFS攻击(Cross Frame Script跨框架脚本攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码中加入scirpt,监视、盗取用户输入。
很简单,做个实验就知道了。把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开。
<html> <head> <title>IE Cross Frame Scripting Restriction Bypass Example</title> <script> var keylog=''; document.onkeypress = function () { k = window.event.keyCode; window.status = keylog += String.fromCharCode(k) + '[' + k +']'; } </script> </head> <frameset onload="this.focus();" onblur="this.focus();" cols="100%"> <frame src="http://www.baidu.com/" scrolling="auto"> </frameset> </html>
当你在百度的搜索框输入字符时,你会发现左下角的状态栏上出现了你输入的字符。
Cross Frame Script 危害 – 通常所说的钓鱼网站
一个恶意的站点可以通过用框架包含真的网银或在线支付网站,获取用户账号和密码。
Cross-Frame Scripting Attack简称CFS攻击,是一种利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码中加入scirpt,监视、盗取用户输入。攻击者可以利用iframe的方式包含你的网页,采用欺骗的方式,引导用户过来点击,利用监听盗取用户输入信息或者是利用样式控制或者骗取用户点击某个特定的区域,而达到获取劫持的目的。
针对此类型的攻击防御手段有以下这些:
增加Token验证:对关键操作增加Token参数,token必须随机,每次都不一样;
关于安全的会话管理,避免会话被利用:不要在客户端保存敏感信息,比如身份验证信息。退出、关闭浏览器时的会话过期机制,设置会话过机制,比如15分钟无操作,则自动登录超时;
访问控制安全管理:敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧密码。建议敏感信息的修改使用POST,而不是GET,建议通过HTTP头部中的REFERER来限制原页面;
增加验证码:一般在登录主要防暴力破解,也可以用在其他重要信息操作的表单中,但是需要考虑可用性;
验证HTTP Referer字段:HTTP头中的Referer字段记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施CSRF攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer值来防御CSRF攻击。
在HTTP头中自定义属性并验证:这种方法也是使用token并进行验证,这里并不是把token以参数的形式置于HTTP请求中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。通过XMLHttpRequest请求的地址不会被记录到浏览器的地址栏,也不用担心token会透过Referer泄露到其他网站中去。