Web安全之防范點擊劫持


點擊劫持(clickjacking)又稱為界面偽裝攻擊 (UI redress attack)是一種在網頁中將惡意代碼等隱藏在看似無害的內容(如按鈕)之下或者將透明的iframe覆蓋在一個正常的網頁上,並誘使用戶點擊的手段。也可以與 XSS 和 CSRF 攻擊相結合,突破傳統的防御措施,提升漏洞的危害程度。

攻擊原理


攻擊者實施攻擊的一般步驟是:

  1. 黑客創建一個網頁利用iframe包含目標網站;
  2. 隱藏目標網站,使用戶無法察覺到目標網站存在;
  3. 構造網頁,誘騙用戶點擊特定按鈕 (圖1中的PLAY!按鈕);
  4. 用戶在不知情的情況下點擊按鈕,觸發執行惡意網頁的命令。

防御方法

服務端防御

X-FRAME-OPTIONS 機制

X-FRAME-OPTIONS是微軟提出的一個http頭,專門用來防御利用iframe嵌套的點擊劫持攻擊。並且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。這個頭有三個值:

  • DENY // 拒絕任何域加載
  • SAMEORIGIN // 允許同源域下加載
  • ALLOW-FROM // 可以定義允許frame加載的頁面地址

如果瀏覽器使用了這個安全機制,在網站發現可疑行為時,會提示用戶正在瀏覽 網頁存在安全隱患,並建議用戶在新窗口中打開。這樣攻擊者就無法通過 iframe 隱藏目標的網頁。


例如github添加了這個頭並且設置為deny,因此不能被嵌套到其他iframe中。


而百度沒加,因此能被嵌套到其他iframe中。


stackoverflow加入了X-Frame-Options : SAMEORIGIN,以stackoverflow為例,在測試頁面中用iframe嵌入stackoverflow:

 <iframe src ="http://stackoverflow.com/"></ iframe>

打開這個頁面,得到下面錯誤:

Java中設置x-frame-options:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
    //必須
     	HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res; 
        //實際設置  
    response.setHeader("x-frame-options", "SAMEORIGIN");    
    //調用下一個過濾器(這是過濾器工作原理,不用動)  
    chain.doFilter(request, response);  
}    

Nginx配置:

add_header X-Frame-Options SAMEORIGIN

Apache配置:

Header always append X-Frame-Options SAMEORIGIN

使用 FrameBusting 代碼

使用 JavaScript 腳本阻止惡意網站載入網頁。如果檢測到網頁被非法網頁載入,就執行自動跳轉功能。Frame Busting代碼是一種有效防御網站被攻擊者惡意載入的方法,網站開發人員使用Frame Busting代碼阻止頁面被非法載入。

使用認證碼認證用戶

點擊劫持漏洞通過偽造網站界面進行攻擊,網站開發人員可以通過認證碼識別用戶,確定是用戶發出的點擊命令才執行相應操作。識別用戶的方法中最有效的方法是認證碼認證。例如,在網站上廣泛存在的發帖認證碼,要求用戶輸入圖形中的字符,輸入某些圖形的特征等。

客戶端防御

升級瀏覽器

最新版本的瀏覽器提供很多防御點擊劫持漏洞的安全機制,對於普通的互聯網用戶,經常更新修復瀏覽器的安全漏洞,能夠最有效的防止惡意攻擊。

NoScript 擴展

對於Firefox的用戶,使用 NoScript 擴展能夠在一定程度上檢測和阻止點擊劫持攻擊。利用 NoScript 中 ClearClick 組件能夠檢測和警告潛在的點擊劫持攻擊,自動檢測頁面中可能不安全的頁面。

參考資料

  1. 點擊劫持攻擊與防御


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM