【漏洞筆記】X-Frame-Options Header未配置

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容