1.案例流程圖:
2.django防止csrf的方式:
1 ) Django中默認打開csrf中間件。settings.py文件中:
MIDDLEWARE_CLASSES = ('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware', # django默認啟用了csrf防護,只針對post提交'django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.auth.middleware.SessionAuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','django.middleware.security.SecurityMiddleware',
)
2 ) 表單post提交數據時加上{% csrf_token %}標簽。
3.防御原理:
1 ) 渲染模板文件時在頁面生成一個名字叫做csrfmiddlewaretoken的隱藏域。
2 ) 服務器交給瀏覽器保存一個名字為csrftoken的cookie信息。
3 ) 提交表單時,兩個值都會發給服務器,服務器進行比對,如果一樣,則csrf驗證通過,否則失敗。