csrf跨域攻击

csrf攻击原理

请求响应:
从正规网站上注册信息等等,网站会给用户返回一个csrf_token,当用户注册的信息发送时,会带着csrf_token一起返回,若返回的csrf_token一致,则成功,若不一致,则没有响应。钓鱼网站不会有csrf_token!

实例

1 首先在model中定义一个表结构,打开终端,生成迁移文件:
python manage.py makemigrations
python manage.py migrate
2 刷新数据库:会出现user_user表单
3 设置路由和视图函数(导包):
4 定义html:
5 启动服务,输入register,提交用户密码,返回注册成功,打开表单,存储成功!(在启动时,要将settings中的CSRF注释掉或在html中添加{% csrf_token %})
6 钓鱼网的设置:
将HTML复制一份,修改action,输入网址,ctrl+shift+f10,启动服务,网址地址更换,注册信息仍可以成功!刷新数据库仍可找到

7 把settings中的csrf开启,重启服务,返回403!
8 为了防止正规的网址也出现403,我们在form里添加:
{% csrf_token %}

代码:

1 model

from django.db import models

# Create your models here.

class User(models.Model):
    username=models.CharField(max_length=16)
    password=models.CharField(max_length=16)

3.路由与视图函数:

 path('register',views.register_handler,name='register'),

from django.shortcuts import render,HttpResponse
from user.models import User   # 导包
def register_handler(request):
    if request.method =='GET':
        return render(request,'register.html')
    else:
        username=request.POST.get('username')
        password=request.POST.get('password')
        # 实例化对象:
        # user= User()
        # user.username = username
        # user.password = password
        # user.save() # 可简写成:
        User(username=username,password=password).save()
        return HttpResponse('注册成功') # 返回结果视图

4 HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'register' %}" method="post">
    {% csrf_token %}
    username
    <input type="text" name="username"><br/>
    password
    <input type="password" name="password"><br/>
    <input type="submit" value="submit">
</form>
</body>
</html>

6 钓鱼网站的设定只有一点不同:

<form action="http://127.0.0.1:8000/register" method="post">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值