如何保证用户登陆时提交密码已经加密

如何保证用户登陆时提交密码已经加密?密码是否已加密,需要客户端和服务端建立约定,双方按约定办事就行了。

这里提到的另一个问题是,如何保证传输安全?
最理想的方案当然是走 HTTPS 协议. HTTPS 在理论上是可靠的,但在国内会打一些折扣:你可以随便找一台电脑看看有没有安装商业公司或机构的根证书,这些根证书为线路某节点成为中间人提供了可能性;同时,在木马横行的年代,密码在加密提交前可能就被拿到了,此时 HTTPS 成了摆设,这是为什么国内流行密码控件的一个重要原因。

从成本和需求上考虑,对于众多对安全性要求不高的个人网站,仍然可以考虑采用 HTTP 传输,密码提交前通过 JavaScript 加密。由于 JavaScript 代码暴露在客户端,因此一般通过不可逆的加密方法加密密码,而对于任何摘要式的加密算法,都可以通过类似 md5 字典的方式直接查表获知弱密码,所以要混入 salt 以增加制作字典的成本。可想而知,解密只是时间成本的问题。因此这里的重要前提是“对安全性要求不高”。

如何验证密码呢?一个可行的方法是,客户端提交 md5(password) 密码(如上所述,此方法只是简单保护了密码,是可能被查表获取密码的)。服务端数据库通过 md5(salt+md5(password)) 的规则存储密码,该 salt 仅存储在服务端,且在每次存储密码时都随机生成。这样即使被拖库,制作字典的成本也非常高。
密码被 md5() 提交到服务端之后,可通过 md5(salt + form[‘password‘]) 与数据库密码比对。此方法可以在避免明文存储密码的前提下,实现密码加密提交与验证。
这里还有防止 replay 攻击(请求被重新发出一次即可能通过验证)的问题,由服务端颁发并验证一个带有时间戳的可信 token (或一次性的)即可。
当然,传输过程再有 HTTPS 加持那就更好了。

最后,为什么要密码控件?原因之一是上面说的,要防止密码在提交前被截获。当然,还有一些其他原因,工作所限,这里就不说了。

原文地址:https://www.cnblogs.com/yangguoe/p/8552138.html

时间: 2024-10-03 22:41:40

如何保证用户登陆时提交密码已经加密的相关文章

域用户登陆时加载个人配置时间很长且本地用户访问共享很慢

慢 今天又遇到一奇葩的问题用户说自己在登陆系统时很慢,要等20多分钟,ping网络看了一下,延迟是OK的,偶尔掉一个包, 做了一下水晶头,不掉包了,所以这时候我排队网络问题了.但域用户登陆确实很慢,用我的域管理员登陆也是一样,登陆本地用户很快,但查看网络上的东西就很慢,像访问共享目录,甚至是右键网络上的文件都会卡住,以为是系统问题.不过这时其他用户也反应这个问题,所以之前的推断就错了,难道是交换机的问题?查看了一下,这几个用户在同一个小交换机上,重启这个小交换机还是一样,那就往上排查,把这个小交

用户登陆程序,密码三次错误自动锁定用户名。

1.正常用户存储文件:users 2.锁定用户存储文件:lock_name 3.执行程序: while True: #while循环. name=input("please input your name:").strip() #引导用户输入用户名. psw=input("please input your psw:").strip() ##引导用户输入密码. dict = {} #建立一个空字典 list = [] #建立一个正常用户名待导入的空列表. list2

http登陆时的密码加密

系统设计登陆页面的时候,需要谨慎.因为登陆数据是在网络上进行传输,很可能中途被拦截. 最好的登陆是使用https,这样网络传输是安全的.google,baidu,alibaba都使用https的方式. 但一般的企业网站,不一定会去部署https.因此我们要考虑在传输过程中加密,避免登录数据太容易被他人破解. 用户在输入用户名,密码,点击登录,在提交数据前,我们应该考虑使用js对password进行加密(例如base64,hash等).这样在网络上传输的是加密后的密码,给拦截者的破解工作带来一定难

asp.net Cookie 用户登陆时记住我

/// <summary> /// 判断Cookie中存储的数据 /// </summary> protected void CheckUserCookie() { //先判断Cookie是否有值 if (Request.Cookies["cp1"] != null && Request.Cookies["cp2"] != null) { //校验数据是否正确. string cookieUserName = Request.

通过js来设置cookie和读取cookie,实现登陆时记住密码的功能

function setCookie(){ //设置cookie var loginCode = $("#login_code").val(); //获取用户名信息 var pwd = $("#login_password").val(); //获取登陆密码信息 var checked = $("[name='checkbox']:checked");//获取“是否记住密码”复选框 if(checked && checked.le

springMvc注册时图形验证码完整代码与详细步骤``````后续更新注册时对密码进行加密

第一使用 画图软件制作图片 ,文件名就是验证码  ------用户的实体类 import java.util.Date; public class Member {    private int id;    private String name;    private String loginName;    private String loginPwd;    private String mobile;    private String email;    private Addre

Flask中如何实现用户登陆认证?

本文和大家分享的主要是使用Flask实现用户登陆认证的相关知识,希望对大家学习Flask有所帮助. 用户认证的原理 在了解使用Flask来实现用户认证之前,我们首先要明白用户认证的原理.假设现在我们要自己去实现用户认证,需要做哪些事情呢? 1. 首先,用户要能够输入用户名和密码,所以需要网页和表单,用以实现用户输入和提交的过程. 2. 用户提交了用户名和密码,我们就需要比对用户名,密码是否正确,而要想比对,首先我们的系统中就要有存储用户名,密码的地方,大多数后台系统会通过数据库来存储,但是实际上

Django中间件 及 form 实现用户登陆

Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误信息 装饰器实现 用户认证 中间件实现 用户认证 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到性能. django默认的中间件在settings.py中 当用户发起请求

后台实现显示欢迎用户登陆的方法

最近在做后台管理时,要实现欢迎用户登陆的功能,现在跟大家分享下,难度不大,就是跟大家交流一下,也算是对自己的总结.比如我们在网站的后台经常会看到欢迎某某登陆,如下图: 那么我们怎么实现这个功能呢,方法有很多,我只是说我用到的那种方法,因为我们登陆会用到session和cookies,所有我用的方法思路: 一.首先说明,当用户登陆时,我们会将用户的信息存储到session,至于为什么要存储到session,主要是为了做验证判断和取值方便, 二.写一个类存储用户的信息,判断session是否为空,不