首页 > 其他分享 >七天学会flask(六)---flask提交表单

七天学会flask(六)---flask提交表单

时间:2023-05-11 09:12:58浏览次数:34  
标签:hash flask 表单 --- 密码 888888 password md5

用户使用表单向服务器提交信息,比如最常见的登录,本文讲解如何在html页面里提交表单,flask如何处理表单数据,此外还将讨论表单敏感信息如何存储。下面是一个简单的登录页面中的form表单

<form action="/login" method="POST">
      <p>name: <input type="text" name="name" /></p>
      <p>password: <input type="password" name="password" /></p>
      <input type="submit" value="提交" />
</form>
  • action 设置提交的url
  • method 设置请求的方法
  • input标签的type设置为password时,在页面输入信息时不会显示明文

在服务端,接收表单信息的方式如下

@app.route('/login', methods=['GET', 'POST'])
def do_login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        name = request.form['name']
        password = request.form['password']
        if name == 'python':
            return render_template('index.html', name=name)
        else:
            return redirect('/login')

通过request.form来获取表单信息,然后要对用户输入的用户名和密码做校验,这里只是为了做演示,因此判断逻辑很简单,真正的产品里,需要拿着用户名和密码去数据库的user表里去查询,如果能找到用户,则说明用户名和密码是正确的。

生产环境下,用户的密码也并不是明文存储,比如你注册网站的时候,填写的密码是888888,网站不会明文存储这个密码,比较简单的做法是存储它的md5值

import hashlib
password = '888888'
bpwd = bytes(password, encoding='utf-8')

m = hashlib.md5()
m.update(bpwd)

md5_pwd = m.hexdigest()
print(md5_pwd)

888888的md5值是 21218cca77804d2ba1922c33e0151105,这样,即便你在数据库里看到这个数值,你也不知道它真实的密码是什么。

需要明确指明一点,md5不是加密算法,而是密码散列函数,它是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么,但是同一个值经过md5计算后的值是不会发生变化的,这样,你只要记住21218cca77804d2ba1922c33e0151105是888888的md5值,就可以对user表进行撞库处理了,网上所谓的md5解密,其实就是事先掌握了海量的密码和与之对应的md5值,然后通过md5反向查找原始密码。

md5值作为密码不够安全,你可以使用werkzeug.security模块里的generate_password_hash和check_password_hash函数。

generate_password_hash是密码加盐哈希函数,对同一个密码,每一次加密都会得到不同的值,generate_password_hash是密码验证函数,并不是反向计算出原始密码哦

下面是一段示例代码

from werkzeug.security import generate_password_hash, check_password_hash

# 对密码进行加密
password = generate_password_hash("888888")
print(password)

# 检查密码是否正确
result = check_password_hash(password, '888888')
print(result)

多次运行你就会发现,每次得到的password都是不同的,但是check_password_hash都能正确验证。

使用这两个函数,就绝对能够防止破解了么?当然不是,黑客还是可以在得到user表后进行暴力破解,但是暴力破解的难度和成本都增加了。

888888经过generate_password_hash函数处理后,会得到无数种加密结果,因此,就无法维护一个加密结果与原始密码的映射表,当你拿到一个加密后的密码后,你当然可以使用check_password_hash(password, '888888')来判断这个密码是不是888888加密后的结果,如果是,你运气好,一下子就蒙对了,但如果不是呢,你怎么办? 你只能尝试其他密码,比如123456,可是这样一来,工作量就太大了,常用的简单密码起码有几十万种,user表里的每一个密码都要尝试几十万次。

但不管怎样,如果你的密码很简单,黑客还是有机会破解,所以,最安全的做法是设置一个复杂一点的密码,让黑客破解密码的成本大到他不愿意承受

标签:hash,flask,表单,---,密码,888888,password,md5
From: https://www.cnblogs.com/joyware/p/17389972.html

相关文章

  • CUDA已经安装但nvcc -V显示command not found(Ubuntu20.04LTS系统)
    背景介绍安装了NVIDIA驱动程序,同时也安装了CUDA,但使用nvcc-V命令提示不存在,如下所示:1Command'nvcc'notfound,butcanbeinstalledwith:2sudoaptinstallnvidia-cuda-toolkit知识补充:为什么要使用nvcc命令?使用nvcc-V命令可以查看CUDA的版本,如下所示为正常的输入......
  • conventional-changelog
    onventional-changelog是一款可以根据项目的commit和metadata信息自动生成changelogs和releasenotes的系列工具,并且在辅助standard-version工具的情况下,可以自动帮你完成生成version、打tag,生成CHANGELOG等系列过程。{ "scripts":{ "version":"conventional......
  • EasyExcel-导入文件
    controller类@PostMapping("/importData")publicResultimportData(MultipartFilefile){dictService.importDictData(file);returnResult.ok();}servicepackagecom.atguigu.yygh.cmn.service;importcom.atguigu.yygh.model......
  • 利用递归输出100-10000之间的水仙花数
    <htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-scale=1.0&quo......
  • 算法学习day13栈与队列part03-239、347
    packageLeetCode.StackAndQueuepart03;importjava.util.ArrayDeque;/***239.滑动窗口最大值*给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。*你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。*返回滑动......
  • CF1817D Half-sum
    前言前几天@adamant在CF上发表文章介绍了AntonTrygub发明的维护大数的算法TheTrygubNumbers。简要地讲,这个算法支持维护一个\(n\)位\(b\)进制数:给定\(i,v\),将数加上\(vb^i\)。给定\(i\),查询数的第\(i\)位的值。查询数的正负。其主要思想是将平常每位只......
  • N4-P4部分debug
    ERROR1:a=sum.read(1)+bERROR2:a=a+1ERROR3:Thetargetlimitsthenumberofactionsaccessingasingleregisterto4.ERROR4:ConditionsinanactionmustbesimplecomparisonsofanactiondataparameterTrymovingthetestoutoftheactionan......
  • Android系统启动-3-zygote篇-1
    基于Android6.0,相关文件主要是:/frameworks/base/cmds/app_process/App_main.cpp/frameworks/base/core/jni/AndroidRuntime.cpp/frameworks/base/core/java/com/android/internal/os/-ZygoteInit.java-Zygote.java-ZygoteConnection.java/frameworks/base/......
  • 算法学习day11栈与队列part02-20、1047、150
    packageLeetCode.StackAndQueuepart02;/***20.有效的括号*给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。*有效字符串需满足:*左括号必须用相同类型的右括号闭合。*左括号必须以正确的顺序闭合。*每个右括号都有一个对应的相同类型的......
  • ubuntu apt 安装报错:Media change: please insert the disc labeled 'Ubuntu 20.04.5
    前言如果你在Ubuntu上使用apt安装软件包时遇到"Mediachange:pleaseinsertthedisclabeled..."的错误消息,这通常是因为apt源列表中包含CD/DVD源,但你的系统中没有插入相应的安装介质(CD或DVD)。解决检查/etc/apt/sources.list文件中,是否出现CD/DVD源。类似d......