房地產(chǎn)網(wǎng)站建設(shè)方案在線培訓(xùn)課程
Clickjacking點擊劫持
- 1、clickjacking攻擊
- 2、clickjacking攻擊場景
1、clickjacking攻擊
clickjacking攻擊又稱為點擊劫持攻擊,是一種在網(wǎng)頁中將惡意代碼等隱藏在看似無害的內(nèi)容(如按鈕)之下,并誘使用戶點擊的手段。
2、clickjacking攻擊場景
用戶進(jìn)入到一個網(wǎng)頁中,里面包含了一個按鈕(查看照片),但是這個按鈕上面加載了一個透明的iframe標(biāo)簽,這個iframe標(biāo)簽加載了另外一個網(wǎng)頁,并且他將這個網(wǎng)頁的某個按鈕和網(wǎng)頁中的按鈕(查看照片)重合,所以你在點擊按鈕(查看照片的時候)實際上點的是通過iframe加載的另外一個網(wǎng)頁的按鈕,比如我現(xiàn)在有一個csdn的用戶賬號,現(xiàn)在想要用戶點擊關(guān)注。那么我們就可以準(zhǔn)備以下頁面:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Clickjacking</title><style>iframe {width: 100%;height: 100%;display: block;position: absolute; /*指定iframe和button為絕對定位*/z-index: 20; /*指定在垂直方向上的高低*/opacity: 0.01;/*指定透明度*/<!--注意,iframe的透明度不能設(shè)置為0,如果設(shè)置為0的話,就不能接受任何的點擊事件了-->}button {position: absolute;left: 40px;top: 65px;z-index: 10;}</style>
</head>
<body>
<h2>哇塞,這張照片里怎么會有我!快來看看有沒有你吧!</h2>
<button>查看照片</button>
<iframe src="https://blog.csdn.net/zjy123078_zjy/" frameborder="0"></iframe>
</body>
</html>
clickjacking防御:我們可以設(shè)置我們的網(wǎng)頁不允許使用iframe被加載到其他網(wǎng)頁中就可以避免這種情況了,我們可以通過在響應(yīng)頭中設(shè)置X-Frame-Options來設(shè)置這種操作,X-Frame-Options可以設(shè)置以下三個值:
- DEBY:不允許任何網(wǎng)頁使用iframe加載我這個頁面。
- SAMEORIGIN:只允許在相同域名(也就是自己的網(wǎng)站)下使用iframe加載這個頁面。
- ALLOWED-FROM origin: 允許任何網(wǎng)頁通過iframe加載我這個網(wǎng)頁。
在Django中,使用中間件django.middleware.clickjacking.XFrameOptionsMiddleware可以幫我們堵上這個漏洞,這個中間件設(shè)置了一個X-Frame-Option為DENY,也就是不允許任何網(wǎng)頁使用iframe加載這個網(wǎng)頁,這樣就可以避免其他的別有用心的網(wǎng)頁去通過iframe加載了。
我們可以查看一下網(wǎng)頁源代碼,如下:
class XFrameOptionsMiddleware(MiddlewareMixin):"""Set the X-Frame-Options HTTP header in HTTP responses.Do not set the header if it's already set or if the response containsa xframe_options_exempt value set to True.By default, set the X-Frame-Options header to 'SAMEORIGIN', meaning theresponse can only be loaded on a frame within the same site. To prevent theresponse from being loaded in a frame in any site, set X_FRAME_OPTIONS inyour project's Django settings to 'DENY'."""def process_response(self, request, response):# Don't set it if it's already in the responseif response.get('X-Frame-Options') is not None:return response# Don't set it if they used @xframe_options_exemptif getattr(response, 'xframe_options_exempt', False):return responseresponse['X-Frame-Options'] = self.get_xframe_options_value(request,response)return responsedef get_xframe_options_value(self, request, response):"""Get the value to set for the X_FRAME_OPTIONS header. Use the value fromthe X_FRAME_OPTIONS setting, or 'DENY' if not set.This method can be overridden if needed, allowing it to vary based onthe request or response."""return getattr(settings, 'X_FRAME_OPTIONS', 'DENY').upper()
所以,在我們使用django創(chuàng)建項目的時候,默認(rèn)的情況下,Django就會默認(rèn)的幫我們定義一個處理“點擊劫持攻擊”的中間件,默認(rèn)情況下就是開啟的