攻擊原理:
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難度不大