X-Frame-Options HTTP響應(yīng)頭是用來確認(rèn)是否瀏覽器可以在frame或iframe標(biāo)簽中渲染一個(gè)頁(yè)面,網(wǎng)站可以用這個(gè)頭來保證他們的內(nèi)容不會(huì)被嵌入到其它網(wǎng)站中,以來避免點(diǎn)擊劫持。
我的網(wǎng)站經(jīng)常被360漏洞檢測(cè)提示“X-Frame-Options頭未設(shè)置”,意思是網(wǎng)頁(yè)可能被別人用iframe框架使用。事實(shí)上,我的網(wǎng)頁(yè)已經(jīng)通過js程序禁止被iframe框架嵌入使用了。不過,對(duì)于使用iis的網(wǎng)站來說,可以設(shè)置下iis,無需在網(wǎng)頁(yè)里編寫js代碼,就能輕松實(shí)現(xiàn)網(wǎng)站的所有網(wǎng)頁(yè)禁止被iframe框架嵌入使用。本文將給大家介紹iis如何設(shè)置禁止網(wǎng)頁(yè)被iframe框架引用。
危害: 攻擊者可以使用一個(gè)透明的、不可見的iframe,覆蓋在目標(biāo)網(wǎng)頁(yè)上,然后誘使用戶在該網(wǎng)頁(yè)上進(jìn)行操作,此時(shí)用戶將在不知情的情況下點(diǎn)擊透明的iframe頁(yè)面。通過調(diào)整iframe頁(yè)面的位置,可以誘使用戶恰好點(diǎn)擊iframe頁(yè)面的一些功能性按鈕上,導(dǎo)致被劫持。
X-Frame-Options 響應(yīng)頭
X-Frame-Options HTTP 響應(yīng)頭是用來給瀏覽器指示允許一個(gè)頁(yè)面可否在 <frame>, </iframe> 或者 <object> 中展現(xiàn)的標(biāo)記。網(wǎng)站可以使用此功能,來確保自己網(wǎng)站的內(nèi)容沒有被嵌到別人的網(wǎng)站中去,也從而避免了點(diǎn)擊劫持 (clickjacking) 的攻擊。
使用 X-Frame-Options
X-Frame-Options 有三個(gè)值:
DENY
表示該頁(yè)面不允許在 frame 中展示,即便是在相同域名的頁(yè)面中嵌套也不允許。
SAMEORIGIN
表示該頁(yè)面可以在相同域名頁(yè)面的 frame 中展示。
ALLOW-FROM uri
表示該頁(yè)面可以在指定來源的 frame 中展示。
換一句話說,如果設(shè)置為 DENY,不光在別人的網(wǎng)站 frame 嵌入時(shí)會(huì)無法加載,在同域名頁(yè)面中同樣會(huì)無法加載。另一方面,如果設(shè)置為 SAMEORIGIN,那么頁(yè)面就可以在同域名頁(yè)面的 frame 中嵌套。
配置 Apache 在所有頁(yè)面上發(fā)送 X-Frame-Options 響應(yīng)頭,需要把下面這行添加到 ‘site’ 的配置中:
Header always append X-Frame-Options SAMEORIGIN
配置 nginx 發(fā)送 X-Frame-Options 響應(yīng)頭,把下面這行添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置中:
add_header X-Frame-Options SAMEORIGIN;
配置 IIS 發(fā)送 X-Frame-Options 響應(yīng)頭,添加下面的配置到 Web.config 文件中:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
“點(diǎn)擊劫持:X-Frame-Options未配置”
因?yàn)轫?xiàng)目使用的是tomcat服務(wù)器,我們不可能在每個(gè)頁(yè)面去添加:
response.addHeader("x-frame-options","SAMEORIGIN");
因此我們使用過濾器,代碼如下:
HttpServletResponse response = (HttpServletResponse) sResponse;
response.addHeader("x-frame-options","SAMEORIGIN");
response.addHeader("x-frame-options","SAMEORIGIN");
加在里面就可以了;
在 Firefox 嘗試加載 frame 的內(nèi)容時(shí),如果 X-Frame-Options 響應(yīng)頭設(shè)置為禁止訪問了,那么 Firefox 會(huì)用 about:blank 展現(xiàn)到 frame 中。也許從某種方面來講的話,展示為錯(cuò)誤消息會(huì)更好一點(diǎn)。
打開網(wǎng)站屬性,切換到“HTTP頭”標(biāo)簽,然后在“自定義 HTTP 頭”里點(diǎn)擊“添加”按鈕。
在彈出窗口里,自定義 HTTP 頭”輸入 X-Frame-Options
,“自定義 HTTP 頭值”輸入 SAMEORIGIN
,點(diǎn)擊“確定”按鈕,就完成了設(shè)置。
IIS6設(shè)置禁止網(wǎng)頁(yè)被iframe框架引用
這里解釋一下 SAMEORIGIN
,它表示該頁(yè)面可以在相同域名頁(yè)面的 frame 中展示。
X-Frame-Options 有三個(gè)值:
表示該頁(yè)面不允許在 frame 中展示,即便是在相同域名的頁(yè)面中嵌套也不允許。
表示該頁(yè)面可以在相同域名頁(yè)面的 frame 中展示。
表示該頁(yè)面可以在指定來源的 frame 中展示。uri
是網(wǎng)頁(yè)地址,如:http://www.webkaka.com/
一句話說,如果設(shè)置為 DENY
,不光在別人的網(wǎng)站 frame 嵌入時(shí)會(huì)無法加載,在同域名頁(yè)面中同樣會(huì)無法加載。另一方面,如果設(shè)置為 SAMEORIGIN
,那么頁(yè)面就可以在同域名頁(yè)面的 frame 中嵌套。
同IIS6一樣,IIS7.5也是通過設(shè)置HTTP頭來實(shí)現(xiàn)。
進(jìn)入 HTTP 響應(yīng)標(biāo)頭 設(shè)置界面,點(diǎn)擊“添加...”,然后“名稱”輸入 X-Frame-Options
,“值”輸入 SAMEORIGIN
,點(diǎn)擊“確定”按鈕,就完成了設(shè)置。
IIS7.5設(shè)置禁止網(wǎng)頁(yè)被iframe框架引用
上面的方法是對(duì)整個(gè)網(wǎng)站所有網(wǎng)頁(yè)都有效的,如果只想某個(gè)網(wǎng)頁(yè)禁止被iframe框架引用,該如何處理呢?我們可以通過JS設(shè)置某張網(wǎng)頁(yè)不允許被iframe框架引用。方法其實(shí)也挺簡(jiǎn)單,代碼如下:
原理是判斷 window.self
是否等于 window.top
。
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇