CSRFの認証メカニズム:
DjangoのためにあるのPOSTリクエスト、CSRFは、認証処理を行うだろう、CSRFの認証メカニズムは、前提の下で任意の処理をせず、防衛クロスサイトフォージェリの機能であるのPOSTリクエストエラー。
CSRF 認定-ステンシル操作:
テンプレートファイル操作:
DjangoのデフォルトのプロジェクトのPOSTリクエストCSRFの認証は、唯一のテンプレートのデータブロックタグを提出するために添加した{{ %vsrf_token %}}に、(キャンセルseetings.pyのプロファイルミドルウェアリスト「ジャンゴ.middleware.csrf.CsrfViewMiddlewareは」、 )、テンプレートページを自動的にレンダリングするそれぞれの中にレンダリングされた非表示になります入力タグ:の<input type = 『隠された』名前= 『csrfmiddlewaretoken』値= 『8J4z1wiUEXt0gJSN59dLMnktrXFW0hv7m4d40Mtl37D7vJZfrxLir9L3jSTDjtG8』> それぞれがランダムでありますの
CSRF 認証-モジュールアクション:
でviews.py:第1導入部からdjango.views.decorators.csrf インポートcsrf_exempt、csrf_protect
(1 )リリースの認定:@csrf_exempt
1 @csrf_exempt #の放出CSRF認証(認証メカニズムがあっても機能の観点からグローバルsettings.pyもPOSTリクエストの解除を存在) 2 DEF ログイン(要求): 3 IF request.method == 「GET 」: 4 戻るレンダリング(要求、" login.htmlと" ) 5。 ELIFの request.method == " POST " : 6 名= request.POST.get(" ユーザ名" ) 7。 PSD = request.POST.get(" userpsd " ) 8。 STATUS =models.auth(名前、PSD) 9 かの状況: 10 リターンのHttpResponse(" <H1>成功</ H1>!" ) 11は 、他: 12 リターンがレンダリング(要求を、" login_fail.html ")
(2 )強制認証を:@csrf_protect
1 @csrf_protect #必須CSRF認証(認証メカニズムもグローバルsettings.pyが存在しない場合、POSTリクエストを表示するためにも必須の認証機能である) 2 DEF ログイン(要求): 3 IF request.method == 「GET 」: 4 返す(リクエスト、レンダリング" login.htmlとを" ) 。5 ELIFの == request.methodを" POST " : 6 名= request.POST.get(" ユーザ名" ) 7。 PSD = request.POST.get(" userpsd " ) 8つの。 ステータス=models.auth(名前、PSD) 9 かの状況: 10 リターンのHttpResponse(" <H1>成功</ H1>!" ) 11は 、他: 12 リターンがレンダリング(要求を、" login_fail.html ")
login.htmlと
1 <!DOCTYPE htmlのは> 2 < HTML LANG = "EN" > 3 < ヘッド> 4 < メタ文字コード= "UTF-8" > 5 < メタHTTP-当量= "リフレッシュ" コンテンツ= "" > 6 < メタ名は= "キーワード" コンテンツ= "" > 7 < スタイル> </ スタイル> 8 < スクリプトSRC = "HTTPS://cdn.bootcss。スクリプト> 9 < リンクのrel = "このスタイルシート" のhref = "" > 10 < タイトル>ログイン</ タイトル> 11 </ ヘッド> 12があり 、< 身体> 13である < フォームアクションhttp://127.0.0.1:8888/login =」 / " メソッド=" POST " > 14 {%}#{%のcsrf_token <! - 自動的にレンダリングテンプレート中の隠し入力タグ(CSRF認証ID)を生成- > #} 15 < 表> 16 <TR > 17 < TD >用户名:</ TD > 18 < TD > < 入力タイプ= "テキスト" 名前= "ユーザ名" > </ TD > 19 </ TR > 20 < TR > 21 < TD >密码:</ TD > 22 < TD > < 入力タイプ= "テキスト" 名前= "userpsd" > </ TD > 23 </ TR > 24 < TR> 25 < TD > < 入力タイプ= "リセット" > </ TD > 26 < TD > < 入力タイプ= "送信" > </ TD > 27 </ TR > 28 </ テーブル> 29 </ フォーム> 30 < / ボディ> 31 </ HTML > 32