clickjacking攻擊:
clickjacking攻擊又稱作點擊劫持攻擊。是一種在網(wǎng)頁中將惡意代碼等隱藏在看似無害的內(nèi)容(如按鈕)之下,并誘使用戶點擊的手段。
clickjacking攻擊場景:
場景一:
如用戶收到一封包含一段視頻的電子郵件,但其中的“播放”按鈕并不會真正播放視頻,而是鏈入一購物網(wǎng)站。這樣當(dāng)用戶試圖“播放視頻”時,實際是被誘騙而進入了一個購物網(wǎng)站。
場景二:
用戶進入到一個網(wǎng)頁中,里面包含了一個非常有誘惑力的按鈕A,但是這個按鈕上面浮了一個透明的iframe標(biāo)簽,這個iframe標(biāo)簽加載了另外一個網(wǎng)頁,并且他將這個網(wǎng)頁的某個按鈕和原網(wǎng)頁中的按鈕A重合,所以你在點擊按鈕A的時候,實際上點的是通過iframe加載的另外一個網(wǎng)頁的按鈕。比如我現(xiàn)在有一個百度貼吧,想要讓更多的用戶來關(guān)注,那么我們可以準(zhǔn)備以下一個頁面:
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<head>
<title>點擊劫持</title>
<style>
iframe{
opacity:0.01;
position:absolute;
z-index:2;
width: 100%;
height: 100%;
}
button{
position:absolute;
top: 345px;
left: 630px;
z-index: 1;
width: 72px;
height: 26px;
}
</style>
</head>
<body>
這個合影里面怎么會有你?
<button>查看詳情</button>
<iframe src="http://tieba.baidu.com/f?kw=%C3%C0%C5%AE"></iframe>
</body>
</html>
頁面看起來比較簡陋,但是實際上可能會比這些更精致一些。當(dāng)這個頁面通過某種手段被傳播出去后,用戶如果點擊了“查看詳情”,實際上點擊到的是關(guān)注的按鈕,這樣就可以增加了一個粉絲。
clickjacking防御:
像以上場景1,是沒有辦法避免的,受傷害的是用戶。而像場景2,受傷害的是百度貼吧網(wǎng)站和用戶。這種場景是可以避免的,只要設(shè)置百度貼吧不允許使用iframe被加載到其他網(wǎng)頁中,就可以避免這種行為了。我們可以通過在響應(yīng)頭中設(shè)置X-Frame-Options來設(shè)置這種操作。X-Frame-Options可以設(shè)置以下三個值:
-
DENY:不讓任何網(wǎng)頁使用iframe加載我這個頁面。 -
SAMEORIGIN:只允許在相同域名(也就是我自己的網(wǎng)站)下使用iframe加載我這個頁面。 -
ALLOW-FROM origin:允許任何網(wǎng)頁通過iframe加載我這個網(wǎng)頁。
在Django中,使用中間件django.middleware.clickjacking.XFrameOptionsMiddleware可以幫我們堵上這個漏洞,這個中間件設(shè)置了X-Frame-Option為SAMEORIGIN,也就是只有在自己的網(wǎng)站下才可以使用iframe加載這個網(wǎng)頁,這樣就可以避免其他別有心機的網(wǎng)頁去通過iframe去加載了。
看文章不過癮?還有免費的視頻教程,讓你學(xué)起來更輕松:https://www.zhiliaoketang.cn/course/detail/4.html