CSRF 攻击:

把 settings.py 中的 csrf 注释掉

正规网站:

创建修改密码页面 password.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改密码</title>
</head>
<body> <p>正规网站 - 修改密码页面</p> <form action="/change_password/" method="post">
<p>
用户名:
<input type="text" name="username">
</p>
<p>
密码:
<input type="text" name="password">
</p> <input type="submit" value="提交">
</form> </body>
</html>

urls.py 中的对应关系:

from django.conf.urls import url
from app01 import views urlpatterns = [
url(r'^change_password/', views.change_password),
]

views.py:

from django.shortcuts import render, HttpResponse

def change_password(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
print("用户 {} 把密码修改为:{}".format(username, password)) return HttpResponse("密码修改成功!") return render(request, "password.html")

访问页面:

点击 “提交”

钓鱼网站:

password.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改密码</title>
</head>
<body> <p>钓鱼网站 - 修改密码页面</p> <form action="http://127.0.0.1:8000/change_password/" method="post">
<p>
用户名:
<input type="text" name="username">
</p>
<p>
密码:
<input type="text" name="password">
<input type="text" name="password" value="test1234" style="display: none">
</p> <input type="submit" value="提交">
</form> </body>
</html>

这里用隐藏的 password 把密码修改成指定的 test1234

urls.py:

from django.conf.urls import url
from app01 import views urlpatterns = [
url(r'^change_password/', views.change_password),
]

views.py:

from django.shortcuts import render

def change_password(request):
return render(request, "password.html")

访问页面:

点击 “提交”

跳转到: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 内容校验,每次的值都会不同

最新文章

  1. CSS 清除默认样式
  2. Android Bitmap转换WebPng图片导致损坏的分析及解决方案
  3. CSS3新增属性
  4. ADO.NET 3.5高级编程:应用LINQ&amp;Entity Framework
  5. 基于kubernetes构建Docker集群管理详解-转
  6. 块状元素和内联元素 【inline block】
  7. SQL语句的执行计划(oracle表的三种链接方式)
  8. Html5新标签及用法
  9. 第一篇、微信小程序_01计算器
  10. CI框架篇之视图篇--载入(1)
  11. 用记事本编写C#程序并运行C#代码
  12. delphi调用外部程序打开文件
  13. c语言输入输出函数
  14. “System.FormatException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 其他信息: 该字符串未被识别为有效的 DateTime。
  15. 在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max——猎八哥fly
  16. 原生JS制作简易Tabs组件
  17. python--ModuleFoundError
  18. JavaScript&#183;DOM,BOM
  19. 第一册:lesson twenty five。
  20. 闭包,jQuery插件的写法:图片预加载

热门文章

  1. Hibernate的持久化对象
  2. 【CSP-S 2019】【洛谷P5666】树的重心【主席树】【树状数组】【dfs】
  3. RookeyFrame Bug 编号显示 系统自动生成 的问题,有时候依旧会显示text文本框
  4. 2017.10.3 国庆清北 D3T2 公交车
  5. javascript 中的对象初始化
  6. 再做一遍floyed
  7. andriod studio连接SQLite
  8. 优雅地使用eruda在移动端上调试网页
  9. 使用Xpose突破安卓App禁止截屏限制
  10. HikariCP 连接最快的连接池