# 第三節:點擊劫持攻擊
# clickjacking攻擊:
`clickjacking`攻擊又稱作**點擊劫持攻擊**。是一種在網頁中將惡意代碼等隱藏在看似無害的內容(如按鈕)之下,并誘使用戶點擊的手段。
## clickjacking攻擊場景:
### 場景一:
如用戶收到一封包含一段視頻的電子郵件,但其中的“播放”按鈕并不會真正播放視頻,而是鏈入一購物網站。這樣當用戶試圖“播放視頻”時,實際是被誘騙而進入了一個購物網站。
### 場景二:
用戶進入到一個網頁中,里面包含了一個非常有誘惑力的`按鈕A`,但是這個按鈕上面浮了一個透明的`iframe`標簽,這個`iframe`標簽加載了另外一個網頁,并且他將這個網頁的某個按鈕和原網頁中的`按鈕A`重合,所以你在點擊`按鈕A`的時候,實際上點的是通過`iframe`加載的另外一個網頁的按鈕。比如我現在有一個百度貼吧,想要讓更多的用戶來關注,那么我們可以準備以下一個頁面:
```
<pre class="calibre12">```
<span class="hljs-class"></span>
<span class="hljs-tag"><<span class="hljs-class">html</span>></span>
<span class="hljs-tag"><<span class="hljs-class">meta</span> <span class="hljs-class">http-equiv</span>=<span class="hljs-string">"Content-Type"</span> <span class="hljs-class">content</span>=<span class="hljs-string">"text/html; charset=gb2312"</span> /></span>
<span class="hljs-tag"><<span class="hljs-class">head</span>></span>
<span class="hljs-tag"><<span class="hljs-class">title</span>></span>點擊劫持<span class="hljs-tag"></<span class="hljs-class">title</span>></span>
<span class="hljs-tag"><<span class="hljs-class">style</span>></span><span class="hljs-class">
<span class="hljs-class">iframe</span>{
<span class="hljs-tag">opacity</span>:<span class="hljs-params">0.01</span>;
<span class="hljs-tag">position</span>:absolute;
<span class="hljs-tag">z-index</span>:<span class="hljs-params">2</span>;
<span class="hljs-tag">width</span>: <span class="hljs-params">100%</span>;
<span class="hljs-tag">height</span>: <span class="hljs-params">100%</span>;
}
<span class="hljs-class">button</span>{
<span class="hljs-tag">position</span>:absolute;
<span class="hljs-tag">top</span>: <span class="hljs-params">345px</span>;
<span class="hljs-tag">left</span>: <span class="hljs-params">630px</span>;
<span class="hljs-tag">z-index</span>: <span class="hljs-params">1</span>;
<span class="hljs-tag">width</span>: <span class="hljs-params">72px</span>;
<span class="hljs-tag">height</span>: <span class="hljs-params">26px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-class">style</span>></span>
<span class="hljs-tag"></<span class="hljs-class">head</span>></span>
<span class="hljs-tag"><<span class="hljs-class">body</span>></span>
這個合影里面怎么會有你?
<span class="hljs-tag"><<span class="hljs-class">button</span>></span>查看詳情<span class="hljs-tag"></<span class="hljs-class">button</span>></span>
<span class="hljs-tag"><<span class="hljs-class">iframe</span> <span class="hljs-class">src</span>=<span class="hljs-string">"http://tieba.baidu.com/f?kw=%C3%C0%C5%AE"</span>></span><span class="hljs-tag"></<span class="hljs-class">iframe</span>></span>
<span class="hljs-tag"></<span class="hljs-class">body</span>></span>
<span class="hljs-tag"></<span class="hljs-class">html</span>></span>
```
```
```
<pre class="calibre12">```
頁面看起來比較簡陋,但是實際上可能會比這些更精致一些。當這個頁面通過某種手段被傳播出去后,用戶如果點擊了“查看詳情”,實際上點擊到的是關注的按鈕,這樣就可以增加了一個粉絲。
```
```
## clickjacking防御:
像以上場景1,是沒有辦法避免的,受傷害的是用戶。而像場景2,受傷害的是百度貼吧網站和用戶。這種場景是可以避免的,只要設置百度貼吧不允許使用`iframe`被加載到其他網頁中,就可以避免這種行為了。我們可以通過在響應頭中設置`X-Frame-Options`來設置這種操作。`X-Frame-Options`可以設置以下三個值:
1. `DENY`:不讓任何網頁使用`iframe`加載我這個頁面。
2. `SAMEORIGIN`:只允許在相同域名(也就是我自己的網站)下使用`iframe`加載我這個頁面。
3. `ALLOW-FROM origin`:允許任何網頁通過`iframe`加載我這個網頁。
在`Django`中,使用中間件`django.middleware.clickjacking.XFrameOptionsMiddleware`可以幫我們堵上這個漏洞,這個中間件設置了`X-Frame-Option`為`SAMEORIGIN`,也就是只有在自己的網站下才可以使用`iframe`加載這個網頁,這樣就可以避免其他別有心機的網頁去通過`iframe`去加載了。
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis