Python - Django - CSRF
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 内容校验,每次的值都会不同
Python - Django - CSRF的更多相关文章
- pythonのdjango CSRF简单使用
一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功 ...
- python, Django csrf token的问题
环境 Window 7 Python2.7 Django1.4.1 sqlite3 问题 在使用Django搭建好测试环境后,写了一个提交POST表单提交留言的测试页面. 如图: 填写表单,点击“提交 ...
- vue-resource pos提交t数据时碰到Django csrf
最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用python+Django开发的.下面我就复盘一下我出现问题的经过. 首先,想用vue进行数据交互只能引入vue-re ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
- python/ Django之中间件
python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...
- python Django之Ajax
python Django之Ajax AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步 ...
- [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)
1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 1. ...
- [原创]Python/Django使用富文本编辑器XHeditor上传本地图片
前言 为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上.期间也遇到种种问题,网上相关资料极少.现在把经验分享给大家. 正文 xheditor篇 1.下载http://xhed ...
- pos提交提交数据时碰到Django csrf
我的github(PS:希望star):https://github.com/thWinterSun/v-admin 最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用 ...
随机推荐
- Ubuntu18.04下安装Sublime Text3并解决不能输入中文
Ubuntu18.04下安装Sublime Text3并解决不能输入中文! 废话不多说,直接按顺序执行下面命令开始安装! wget -qO - https://download.sublimetext ...
- noi.ac #43 dp计数
\(sol\) 状态 \[f_{i, dis_1, dis_2, dis_3, dis_4}\] 表示到了第 \(i\) 层,其中 \(dis_{1}\) 表示第一根柱子剩下的最靠上的横木到当前 \( ...
- flutter踩坑小记:The number of method references in a .dex file cannot exceed 64K.
The number of method references in a .dex file cannot exceed 64K. 这句话的意思翻译出来是:.dex文件中的方法引用数不能超过64K. ...
- golang-切片
切片练习 package main import "fmt" /*func main() { arr := [10]int {1, 2, 3, 4, 5, 6, 7, 8, 9, ...
- C# 百度API地址坐标互相转换
通过C#代码将地址字符串转为经纬度坐标,或者将经纬度转为具体的地址字符串,在不通外网的项目中是有需求的. 具体步骤: 一.创建BaiduMapHelper,用于定义地址信息和请求. public st ...
- Tkinter 之事件绑定
import tkinter as tk window = tk.Tk() # 设置窗口大小 winWidth = 600 winHeight = 400 # 获取屏幕分辨率 screenWidth ...
- MySQL之级联删除、级联更新、级联置空
1. 准备测试表 # 专业表major ))engine=innodb default charset=utf8; # 学生表mstudent ), major int)engine=innodb d ...
- docker技术入门(1)
1Docker技术介绍 DOCKER是一个基于LXC技术之上构建的container容器引擎,通过内核虚拟化技术(namespace及cgroups)来提供容器的资源隔离与安全保障,KVM是通过硬件实 ...
- Momentum Contrast for Unsupervised Visual Representation Learning (MoCo)
Momentum Contrast for Unsupervised Visual Representation Learning 一.Methods Previously Proposed 1. E ...
- #C++初学记录(字符串与指针操作库函数)
测试程序 #include<iostream> #include<cstring> using namespace std; int a[204],b[204],lena,n; ...