django的csrf中介軟體
阿新 • • 發佈:2018-11-30
Django的csrf中介軟體
CSRF:跨站請求偽造Cross Site Request Forgery
CSRF的攻擊流程
使用者a 訪問可信站點1做業務處理,此時瀏覽器會儲存該網站的cookie,當用戶a 訪問不可信站點2時,如果站點2有指向站點1的連結時候,那麼攻擊就用可能發生
Eg:
1、包含站點1的連結,點選跳轉
2、img 的src屬性值是站點1的連結
3、Js載入,js裡有跳轉的動作
Django的解決方法
Django預防CSRF攻擊的方法是在使用者提交的表單中加入一個csrftoken的隱含值,這個值和伺服器中儲存的csrftoken的值相同
前後端的使用
後端
全域性使用(禁用)
區域性使用或禁用
from django.views.decorators.csrf import csrf_exempt(不使用CSRF驗證), csrf_protect(使用CSRF校驗)
前端
Form表單
Ajax 方式
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
面試回答:
1 解釋什麼是CSRF
跨站請求偽造Cross Site Request Forgery
2什麼是跨站請求偽造
使用者a 訪問可信站點1做業務處理,此時瀏覽器會儲存該網站的cookie,當用戶a 訪問不可信站點2時,如果站點2有指向站點1的連結時候,那麼攻擊就用可能發生
3 Django是如何實現防止攻擊
1 當瀏覽器和Django伺服器互動的時候 Django伺服器會生成一個隨機的token(字串) 然後把這個字串儲存到瀏覽器的從okie裡,同時在頁面新增隱藏的input標籤 值就是csrf_token 2 以後再和伺服器做post請求的時候 前端頁面要帶上csrf_token 3 伺服器就會去校驗前端傳過來的csrf_token和伺服器儲存是不是一致 if 不一致: return 403 禁止訪問 else: 一致的時候 正常相應