攻击原理:
CFS攻击(Cross Frame Script(跨框架脚本)攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码
中加入scirpt,监视、盗取用户输入。
Clickjacking(点击劫持) 则是是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,
点击攻击者想要欺骗用户点击的位置。
CFS 和 Clickjacking其实都是基于网页iframe产生的攻击。当没有预防的时候,攻击者可以利用iframe的方式包含你的网页,
采用欺骗的方式,引导用户过来点击,利用监听盗取用户输入信息或者是利用样式控制或者骗取用户点击某个特定的区域,而达到
获取劫持的目的。
防止被 FRAME 加载你的网站页面
1. meta 标签:很多时候没有效果,无视
<meta http-equiv="Windows-Target" contect="_top">
2. js 判断顶层窗口跳转,可轻易破解,意义不大
function locationTop(){
if (top.location != self.location) {
top.location = self.location;
return false;
}
return true;
}
locationTop();
破解:
// 顶层窗口中放入代码
var location = document.location;
// 或者 var location = "";
【像淘宝前端页面用的js:
if (top.location != self.location){ top.location = self.location; }
】
3. header 控制,绝大部分浏览器支持
使用 X-Frame-Options 有三个可选的值:
DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM:允许frame加载的页面地址
PHP代码:
header('X-Frame-Options:Deny');
Nginx配置:
add_header X-Frame-Options SAMEORIGIN
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
具体参见:https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header
注明: 如果是针对 安全扫描 appscan 或者CFCA认证 用的webinspect 这些工具的话扫出来的 Cross_Frame SCRIPT之类的high级别的安全问题,用第三条解决是可以过扫描的。如果不是过工具扫描,上述三中方案都是可行的。在java中加入header deny方法如下(spring mvc,其他框架大同小异)
@RequestMapping("/login") public String login(HttpServletRequest request,HttpServletResponse response) { HttpSession session = request.getSession(); session.invalidate(); response.addHeader("x-frame-options","DENY"); return "login"; }
之所以扫描工具不认前端js跳出frame也是有道理的,毕竟破前端js难度不大