1. 程式人生 > >django的csrf中介軟體

django的csrf中介軟體

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:
        一致的時候 正常相應