0x00 概述
漏洞名稱:X-Frame-Options Header未配置
風(fēng)險(xiǎn)等級(jí):低危
問(wèn)題類型:管理員設(shè)置問(wèn)題
0x01 漏洞描述
X-Frame-Options HTTP 響應(yīng)頭是用來(lái)給瀏覽器指示允許一個(gè)頁(yè)面可否在 <frame>, <iframe>, <embed> 或者 <object> 中展現(xiàn)的標(biāo)記。
網(wǎng)站可以使用此功能,來(lái)確保自己網(wǎng)站的內(nèi)容沒(méi)有被嵌到別人的網(wǎng)站中去,從而避免點(diǎn)擊劫持(clickjacking)攻擊。
X-Frame-Options有三個(gè)值:
deny
表示該頁(yè)面不允許在 frame 中展示,即便是在相同域名的頁(yè)面中嵌套也不允許。
sameorigin
表示該頁(yè)面可以在相同域名頁(yè)面的 frame 中展示。
allow-from uri
表示該頁(yè)面可以在指定來(lái)源的 frame 中展示。
換一句話說(shuō),如果設(shè)置為DENY,不光在別人的網(wǎng)站frame嵌入時(shí)會(huì)無(wú)法加載,在同域名頁(yè)面中同樣會(huì)無(wú)法加載。
另一方面,如果設(shè)置為SAMEORIGIN,那么頁(yè)面就可以在同域名頁(yè)面的frame中嵌套。正常情況下我們通常使用SAMEORIGIN參數(shù)。
0x02 漏洞危害
攻擊者可以使用一個(gè)透明的、不可見(jiàn)的iframe,覆蓋在目標(biāo)網(wǎng)頁(yè)上,然后誘使用戶在該網(wǎng)頁(yè)上進(jìn)行操作,此時(shí)用戶將在不知情的情況下點(diǎn)擊透明的iframe頁(yè)面。通過(guò)調(diào)整iframe頁(yè)面的位置,可以誘使用戶恰好點(diǎn)擊iframe頁(yè)面的一些功能性按鈕上,導(dǎo)致被劫持。
也就是說(shuō)網(wǎng)站內(nèi)容可能被其他站點(diǎn)引用,可能遭受到點(diǎn)擊劫持攻擊。
0x03 修復(fù)建議
配置 Apache
配置 Apache 在所有頁(yè)面上發(fā)送 X-Frame-Options 響應(yīng)頭,需要把下面這行添加到 'site' 的配置中:
Header always set X-Frame-Options "sameorigin"
要將 Apache 的配置 X-Frame-Options 設(shè)置成 deny , 按如下配置去設(shè)置你的站點(diǎn):
Header set X-Frame-Options "deny"
要將 Apache 的配置 X-Frame-Options 設(shè)置成 allow-from,在配置里添加:
Header set X-Frame-Options "allow-from https://example.com/"
配置 nginx配置
nginx 發(fā)送 X-Frame-Options 響應(yīng)頭,把下面這行添加到 'http', 'server' 或者 'location' 的配置中:
add_header X-Frame-Options sameorigin always;
配置 IIS配置
IIS 發(fā)送 X-Frame-Options 響應(yīng)頭,添加下面的配置到 Web.config 文件中:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="sameorigin" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
配置 HAProxy
配置 HAProxy 發(fā)送 X-Frame-Options 頭,添加這些到你的前端、監(jiān)聽(tīng) listen,或者后端的配置里面:
rspadd X-Frame-Options:\ sameorigin
或者,在更加新的版本中:
http-response set-header X-Frame-Options sameorigin
配置 Express
要配置 Express 可以發(fā)送 X-Frame-Options header,你可以用借助了 frameguard 來(lái)設(shè)置頭部的 helmet。在你的服務(wù)器配置里面添加:
const helmet = require('helmet');
const app = express();
app.use(helmet.frameguard({ action: "sameorigin" }));
或者,你也可以直接用 frameguard:
const frameguard = require('frameguard')
app.use(frameguard({ action: 'sameorigin' }))
更多信息歡迎關(guān)注我的個(gè)人微信公眾號(hào):TeamsSix
原文鏈接:https://www.teamssix.com/year/191119-144643.html
參考文章:
https://blog.whsir.com/post-3919.html
https://blog.csdn.net/qq_25934401/article/details/81384876
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options