1. 程式人生 > >基於iframe的CFS(Cross Frame Script)和Clickjacking(點選劫持)攻擊

基於iframe的CFS(Cross Frame Script)和Clickjacking(點選劫持)攻擊

防止被 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難度不大