Django+MySQL数据脱敏加密存取

一,概述

在Django项目中将前端客户注册的用户名密码脱敏处理(加密后)存入目标数据库MySQL中可以通过以下步骤实现:

  1. 安装必要的库:确保当前Django项目中安装了bcrypt或者passlib等密码哈希库。这些库提供了密码加密和验证的功能。(可以在pycharm中查看)

  2. 创建用户模型:在Django的模型中创建一个用户模型,用于存储加密后的用户名和密码。可以使用Django内置的User模型,或者自定义一个新的模型。

from django.db import models

class longUser(models.Model):
    username = models_.CharField(max_length=150, unique=True)
    password = models.CharField(max_length=128)
  1. 密码加密:在用户注册过程中,将前端传递的明文密码进行加密,并将加密后的密码存储到数据库中。可以在视图函数或者表单中进行密码加密操作。以下是在视图中进行加密的一个示例:
from django.contrib.auth.hashers import make_password  #引入加密模块
from .models import longUser  # 引入在models.py中定义的模型

def register(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        hashed_password = make_password(password)  # 使用make_password函数对密码进行加密
        CustomUser.objects.create(username=username, password=hashed_password)
        # 其他注册逻辑...

    # 其他处理逻辑...
  1. 密码验证:在用户登录过程中,将用户输入的密码与数据库中的加密密码进行验证。可以使用Django内置的check_password函数进行密码验证。
from django.contrib.auth.hashers import check_password
from .models import CustomUser

def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = CustomUser.objects.get(username=username)
        if check_password(password, user.password):  # 使用check_password函数进行密码验证
            # 验证成功,执行登录操作
        else:
            # 密码验证失败,处理错误逻辑

    # 其他处理逻辑...

通过以上步骤,在Django项目中将前端客户注册的用户名密码加密后存入MySQL,并在登录时进行密码验证。注意密钥安全和密码哈希算法的选择以确保密码的安全性。

二,具体应用

我们现在对上一篇博文:基于自签名证书的Django+MySQL项目安全加固 已经实现的项目内容进行安全加固,在现有的登陆界面增加一个注册功能控件(为没有账户的用户注册使用),并且把用户提交的账户密码加密后存入目标数据库。
由于前面我们已经创建并迁移了用户信息的数据表(userdate)
在mysql中的my1_userdate (也即是models.py中的userdate,迁移到mysql时会自动加上应用名的前缀,如my1)

(一) 在视图函数中处理

如果我们仍然使用该已有大的项目表 直接进行引入加密模块进行数据存放,只是 1 在views中加入存放数据时进行加密处理
在这里插入图片描述

def user_register(request):
    u_pwd = request.POST.get('p')
    user_name1 = request.POST.get('u')
    hash_u_pwd=make_password(u_pwd)
    register_mesage=long_userdate(userid=hash_u_pwd,username=user_name1) # 加密处理
    register_mesage.save()
    return render(request, 'talk_sub.html')

在数据加密处理后,运行字体可能产生以下问题

在这里插入图片描述
make_password函数生成的密码哈希值的长度是固定的,具体长度取决于所使用的密码哈希算法。在Django中,默认使用的是PBKDF2算法,并且哈希值的长度为128个字符。

需要注意的是,这个长度是指生成的密码哈希值的字符串表示形式的长度,而不是实际加密后的二进制数据长度。密码哈希值经过编码后以字符串形式存储在数据库中( 如下图)
在这里插入图片描述

因此,我们需要修改原来的表结构,或者重新定义一个符合要求的表本文采用重新定义一个表long_userdate,如下图
在这里插入图片描述

关于数据脱敏存放时,数据模型可以采用新建的方式,也可以采用关联框架中默认的模型来实现,具体见下面(二)中的内容

(二)模型–表设置

以下给出两种方:
方法一:

1 重新在models.py定义一个 模型

根据上一节的分析,我们可以重新在models.py定义一个 模型,然后使用数据库的迁移命令迁移到目标数据库

class long_userdate(models.Model):
    userid=models.CharField(max_length=150)
    username=models.CharField(max_length=150)

方法二(引入框架中自带的user模型):

2 在现有的表中引入django中自带的user模型

Django内置的User模型提供了一种方便的方式来管理用户身份验证和管理。可以通过以下步骤来使用User模型:

(1). 在Django项目中打开models.py文件。

(2). 导入User模型:

from django.contrib.auth.models import User

3). 在你的模型类中,将User模型作为一个字段关联到你的模型中。假设我们现在有一个userdate模型,与其关联:

class  userdate(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # 其他字段...

(4). 在以上关联成功后,可以在(三)数据迁移成功后使用User模型进行用户身份验证、创建用户、查询用户等操作。例如,以下是一些常见的用法示例:

  • 创建用户:

    user = User.objects.create_user(username='john', password='password123')
    
  • 用户身份验证:

    from django.contrib.auth import authenticate
    
    user = authenticate(username='john', password='password123')
    
    if user is not None:
        # 用户通过验证
    else:
        # 用户未通过验证
    
  • 查询用户:

    user = User.objects.get(username='john')
    

(三). 运行数据库迁移命令,将数据模型添加到数据库中:

python manage.py makemigrations
python manage.py migrate
(四)前端页面以及路由的设置
1 在需要添加用户注册空间的界面html文件中,插入一个表单(用来采集用户名和密码输入的信息)

在这里插入图片描述

如:(required标注必填项目,register_message是下面urls.py中定义的)

<form method="post" action="{% url 'register_message' %}"> #url
        {% csrf_token %}
        <label>用户名:</label>
        <input type="text" id="txtPassword" name="p"  required><br><br>
        <label>密码:</label>
        <input type="text" id="txtPassword" name="u" required><br><br>
        <input type="submit" value="注册">    # 注意这里type="submit",不是button
</form>
2 在项目的urls 文件中设置url

path(‘register_m/’,views.user_register,name=‘register_message’)
在这里插入图片描述

通过以上的步骤即可完成用户注册数据加密处理并入库
在这里插入图片描述
使用以上步骤实现用户注册后,先前的登陆模块也可以关联到脱敏后的用户信息表中(但是要注意,前面的连接html跳转和urls.py中的要做相应的修改在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值