X-Frame-Options – 輕鬆解決點擊劫持與 iframe 蓋台問題

6 / 8, 2014 PHP , 架站技巧 , 網路安全

其陣子有很多人抱怨自己網頁被其他網站蓋台,什麼是蓋台呢?就是指在別人的網頁放入自己的網站而渾然不知,最常被運用的方法就是 iframe , iframe 這個tag本意是好的,可以嵌入網頁,開發上方便許多,但是現在早就已經不會這樣開發了, iframe 現在很常被用來作上述的蓋台,甚至點擊劫持 (ClickJacking) ,所謂的點擊劫持就是利用兩個圖層,最上面的圖層是隱藏的(通常是 iframe),下面則是騙人用的內容,利用 CSS 使上下層的按鈕對齊,當你以為你按了下層顯示的按鈕時,實際上你是按到上層隱藏的按鈕,這就是點擊劫持

講了這麼多廢話,就是要介紹一個新玩意:X-Frame-Options,這是一個 HTTP 標頭的新協議,可以控制 iframe 的運作,只要不符合規定,則回傳空白頁

以下為使用與舉例:

X-Frame-Options: DENY
完全禁止任何 iframe 請求

X-Frame-Options: SAMEORIGIN
只允許同源請求,例如網頁為 foo.com/123.php,則 foo.com 底下的所有網頁可以嵌入此網頁,但是 foo.com 以外的網頁都不能嵌入

X-Frame-Options: ALLOW-FROM http://s3131212.com
只允許指定網頁的請求

至於調用方法,因語言而異,以PHP而言是這樣調用的

實際運作結果,我用DENY來作示範, test.php 是目標網頁,已經宣告X-Frame-Options: DENY,iframe.php則是要嵌入iframe的網頁,會發現嵌入後test.php回傳http 200,但是因為有宣告 X-Frame-Options ,所以回傳是空白的,而直接瀏覽 test.php 時則是顯示 hello world
x-frame-options