當前位置: 首頁> 最新文章列表> 用header() 限制iframe 加載當前頁面(Clickjacking 防護)

用header() 限制iframe 加載當前頁面(Clickjacking 防護)

M66 2025-05-28

Clickjacking 是一種惡意技術,通過將網頁嵌入到透明的iframe 中,用戶在不知情的情況下,點擊了攻擊者所控制的網頁上的某些內容。為了防止這種攻擊,我們可以通過HTTP 頭部(header)信息來阻止頁面被嵌套到iframe 中。

在PHP 中,我們可以使用header()函數來設置合適的HTTP 響應頭,從而實現防禦。

什麼是Clickjacking 攻擊?

Clickjacking 攻擊的原理是通過欺騙用戶點擊他們看不見的界面元素,使用戶在不知情的情況下執行操作。通常攻擊者會使用iframe 將目標網站的頁面嵌套在自己的網頁中,通過透明度或其他手段遮掩頁面內容,讓用戶在操作看似無害的內容時,其實是在執行攻擊者想要的操作。

如何防止iframe 加載當前頁面?

防止頁面被嵌套到iframe 中的最佳方式是使用X-Frame-Options響應頭。這個頭部告訴瀏覽器當前頁面是否允許被嵌套在iframe 中,使用該方法可以有效防止Clickjacking 攻擊。

使用header()函數設置X-Frame-Options

在PHP 中,你可以通過header()函數發送HTTP 響應頭。要防止頁面被嵌套到iframe 中,可以使用以下代碼:

 <?php
// 設定 X-Frame-Options 防止頁面被嵌套在 iframe 中
header('X-Frame-Options: DENY');

// 或者如果你希望只允許在指定域名下嵌套頁面,可以使用:
header('X-Frame-Options: ALLOW-FROM https://m66.net');

// 繼續處理頁面的其他內容
?>

X-Frame-Options的值

  • DENY :禁止任何網頁通過iframe 加載當前頁面。

  • SAMEORIGIN :只允許同一來源(即相同域名)的頁面通過iframe 加載當前頁面。

  • ALLOW-FROM uri :允許指定的域名通過iframe 加載當前頁面。請注意, ALLOW-FROM選項在某些瀏覽器中(如Firefox)已被廢棄,因此通常推薦使用DENYSAMEORIGIN

示例:防止iframe 嵌套

以下是一個實際示例,展示瞭如何在PHP 頁面中設置X-Frame-Options頭部,以防止其他站點將當前頁面嵌套到iframe 中:

 <?php
// 防止 Clickjacking 攻擊
header('X-Frame-Options: DENY');

// 設定其他 HTTP 響應頭部
header('Content-Type: text/html; charset=UTF-8');

// 頁面內容
echo "<h1>這是一個安全的頁面</h1>";
echo "<p>該頁面無法被嵌套在 iframe 中。</p>";
?>

其他防禦措施

雖然X-Frame-Options是防止Clickjacking 攻擊的有效方法,但它並不是唯一的防禦措施。你還可以使用Content Security Policy (CSP) 來進一步加強防護。例如,通過設置CSP 頭部,明確禁止頁面被嵌套在iframe 中:

 <?php
// 使用 CSP 禁止嵌套
header("Content-Security-Policy: frame-ancestors 'none';");

// 頁面內容
echo "<h1>這是一個安全的頁面</h1>";
?>

通過將frame-ancestors設置為'none' ,你可以完全禁止頁面被嵌套在任何iframe 中,這種方法比X-Frame-Options更具靈活性。

這樣就可以有效地防止你的頁面被嵌套在iframe 中,避免Clickjacking 攻擊。根據你的需求,可以選擇使用X-Frame-Options或者Content Security Policy(CSP)來實現防禦。