zoukankan      html  css  js  c++  java
  • Python

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

  • 相关阅读:
    Python3 tkinter基础 Canvas create_text 在画布上添加文字
    js中如何返回一个存放对象的数组?
    vs2015 出现Lc.exe 已退出,代码为-1的问题,如何解决
    微信PC客户端无法发送图片,怎么解决?
    vs2015 编译时项目出现NuGet程序包还原失败,找不到xxx.xxx.xxx版本的程序包,怎么解决这个问题?
    sql server 根据身份证号计算出生日期和年龄的存储过程
    sql server中截取字符串的常用函数
    sql server 中进行除法运算时,如何得到结果是小数形式呢?
    sql中,如何获取一个数的整数部分和余数部分
    sql 中,如何获取两个日期之前月数、周数、天数
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11295352.html
Copyright © 2011-2022 走看看