CSRF攻撃:
CSRFは、settings.pyにコメント
通常のWebサイト:
パスワード変更ページpassword.htmlの作成:
<!DOCTYPE HTML> <HTML LANG = "EN"> <HEAD> <メタ文字コード= "UTF-8"> <タイトル>修改密码</ TITLE> </ HEAD> <BODY> <P>正规网站-修改密码页面</ P> <フォームアクション= "/ CHANGE_PASSWORD /"メソッド= "ポスト"> <P> 用户名: の<input type = "text"の名= "ユーザ名"> </ P> <P> 密码: <入力タイプ= "text"の名= "パスワード"> </ P> <入力タイプ= "提出"値= "提交"> </ FORM> </ BODY> </ HTML>
のUrls.py対応関係:
django.conf.urlsからURLを読み込む app01インポートビューから [urlpatterns = 、URL( '^ CHANGE_PASSWORD / R'、views.change_password) ]
views.py:
django.shortcutsからレンダリング、HttpResponseにインポートし ます:def CHANGE_PASSWORD(リクエスト) request.method場合== "POST": ユーザ名は= request.POST.get( "ユーザ名") パスワード= request.POST.get( "パスワード") 印刷( "用户{}把密码修改为:{}"。形式(ユーザー名、パスワード)) のリターンはHttpResponse( "!密码修改成功は") (リクエスト、 "password.htmlを"レンダリングを返します)
Accessページ:
クリックして「送信」
フィッシングサイト:
password.html:
<!DOCTYPE HTML> <HTML LANG = "EN"> <HEAD> <メタ文字コード= "UTF-8"> <タイトル>修改密码</ TITLE> </ HEAD> <BODY> <P>钓鱼网站-修改密码页面</ P> <フォームアクション= "http://127.0.0.1:8000/change_password/"メソッド= "ポスト"> <P> 用户名: の<input type = "text"の名= "ユーザ名"> </ P> <P> 密码: の<input type = "text" NAME = "パスワード"> の<input type = "text"の名= "パスワード"値= "test1234"スタイル= "表示:なし"> </ P> <input type = "提出"値= "提交"> </ FORM> </ BODY> </ HTML>
ここでは、パスワード指定test1234を変更するには隠されたパスワードを使用して、
urls.py:
django.conf.urlsからURLを読み込む app01インポートビューから [urlpatterns = 、URL( '^ CHANGE_PASSWORD / R'、views.change_password) ]
views.py:
django.shortcutsインポートからレンダリング :(要求を)CHANGE_PASSWORD DEF リターンは(要求、 "password.html")をレンダリング
Accessページ:
クリックして「送信」
ます。http://127.0.0.1:8000 / CHANGE_PASSWORD /変更、および表示する成功へジャンプ
パスワードはtest1234、代わりの111111に変更されます
CSRFの保護:
キャンセルsettings.pyのコメント
このフィッシング詐欺のページでは、その後、要求を送信し、それが受け入れられません
保険は、もう少しすることができます:
password.html正式なウェブサイトを変更します。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>修改密码</title> </head> <body> <p>正规网站 - 修改密码页面</p> <form action="/change_password/" method="post"> {% csrf_token %} <p> 用户名: <input type="text" name="username"> </p> <p> 密码: <input type="text" name="password"> </p> <input type="submit" value="提交"> </form> </body> </html>
在 form 表单中添加了一条 {% csrf_token %}
访问该 url:
添加了隐藏的 csrf 内容校验,每次的值都会不同