文/玄魂html
目錄nginx
前言... web
1.1 點擊劫持(clickjacking attacks)... apache
1.2 Frame Bursters. 瀏覽器
1.3 The X-Frame-Options. 安全
1.3.1 X-Frame-Options. 服務器
1.3.2 Apache配置X-Frame-Options. cookie
1.3.3 Nginx 配置X-Frame-Options. app
1.3.4 IIS配置X-Frame-Options. ide
1.4 瀏覽器兼容性...
「Clickjacking(點擊劫持)是由互聯網安全專家羅伯特·漢森和耶利米·格勞斯曼在2008年提出的。
是一種視覺欺騙手段,在web端就是iframe嵌套一個透明不可見的頁面,讓用戶在不知情的狀況下,點擊攻擊者想要欺騙用戶點擊的位置。」
假設你訪問一個web站點並看到以下的頁面:
免費的午飯誰都喜歡,當你滿懷期待的點擊按鈕「WIN」的時候,恭喜你,你已經被點擊劫持了。你實際點擊的連接以下:
這是登陸網上銀行以後的一個轉帳連接,轉移你的所有資產給Kim Dotcom先生。可是你根本你沒有看到這個頁面,像作夢同樣。這只是一個簡單的示例,實現上在網上銀行轉帳不會這麼簡單,可是卻告訴咱們一個道理,訪問網頁和看魔術表演同樣,看到的不必定都是真的。
下面咱們具體討論下點擊劫持的內部機制,和防護措施。
點擊劫持的表象通常是用戶點擊了頁面的A元素,可是實際上接收點擊事件的倒是另一個元素。
如今改變下頁面內個元素的透明度,再來看下剛纔的頁面。
咱們能夠看到,在ipad頁面是上部還有個層,其實是一個iframe,如今的透明度爲50%,實際的頁面中它的透明度爲0%,雖然被隱藏不可見,可是隨時均可以被激活。
在 Firefox的3D視圖下,觀察這個頁面更明顯。
被隱藏的iframe在IPAD頁面的上部,同時轉款的連接正好在「WIN」的上方,由於設置了透明度,用戶只能看到「WIN」,但實際點擊的是轉款。
攻擊者的頁面內容多是這樣的:
代碼就是這麼簡單,下面咱們觀察一下點擊「WIN」時實際上點擊「轉款」連接時的http請求信息。
從圖中標記的地方,能夠看到請求的實際地址和身份驗證的cookie信息。固然這樣的攻擊能成功,在於用戶已經登陸的網上銀行。這樣的攻擊行爲和跨站請求僞造很相似。
下面咱們討論下針對點擊劫持的基本防護方法。
這是在頁面上經過腳原本防止點擊劫持或者iframe惡意請求的方式,本文不作介紹,詳見http://seclab.stanford.edu/websec/framebusting/framebust.pdf,烏雲有篇相似的中文文章共參考http://drops.wooyun.org/papers/104。
X-Frame-Options HTTP 響應頭,能夠指示瀏覽器是否應該加載一個iframe中的頁面。網站能夠經過設置X-Frame-Options阻止站點內的頁面被其餘頁面嵌入從而防止點擊劫持。
X-Frame-Options共有三個值:
DENY
任何頁面都不能被嵌入到iframe或者frame中。
SAMEORIGIN
頁面只能被本站頁面嵌入到iframe或者frame中。
ALLOW-FROM uri
頁面自能被指定的Uri嵌入到iframe或frame中。
在站點配置文件httpd.conf中添加以下配置,限制只有站點內的頁面才能夠嵌入iframe。
配置以後重啓apache使其生效。該配置方式對IBM HTTP Server一樣適用。
若是同一apache服務器上有多個站點,只想針對一個站點進行配置,能夠修改.htaccess文件,添加以下內容:
到 nginx/conf文件夾下,修改nginx.conf ,添加以下內容:
重啓Nginx服務。
在web站點的web.config中配置:
桌面瀏覽器: