用户登录安全是如何保证的?如何保证用户账号、密码安全?

1.HTTP协议直接传输密码(无加密)

前端 直接发送HTTP请求(无加密),攻击者可直接捕获网络包,看到下面的明文信息

因此,使用HTTP协议传输会直接暴露用户敏感信息。

2.HTTPS协议直接传输密码(加密传输)

后来人们提出了HTTPS协议,HTTPS协议利用TLS/SSL协议进行加密。

那么,使用HTTPS协议直接传输密码(加密传输——对称加密/非对称加密)就一定是安全的吗?

对称加密存在的缺点:

  • 前后端加密解密需要同时修改代码;

  • 前端加密无非是写在JS里,但是JS有风险被直接破解从而识别加密方法。

非对称加密存在两种风险 :

  • HTTPS是应用层协议,下层采用TLS/SSL协议保证信息安全,但是在应用层之上——客户端和服务端,密文同样是可以被截获的。
  • HTTPS报文在传输过程中,如果客户端被恶意引导安装“中间人的Web信任证书”,那么HTTPS中的“中间人攻击”一样会将明文密码泄露。

结论是,无论HTTP还是HTTPS,密码必须密文传输

想想HTTPS也不能一定保障用户密码信息,那么就应该考虑在应用层之上再继续对密码进行保护,也就是编写代码来进行控制,而不依赖特定协议

3.使用摘要算法进行加密

比较容易想到的就是利用不可逆加密散列函数MD5(string),用户在注册输入密码的时候,就存储MD5(password)值,并且在WEB端先进行MD5(password),然后将密码传输至后台,与数据库中的密文进行比较(PS:MD5函数在指定位数的情况下,对相同字符串运算值相同)。

优点比较明显:

  1. 保证数据库内用户的密码信息安全
  2. 在传输过程中只能截取到用户的密文,该密文被MD5加密后无论如何也不能破解
  3. 简单高效,执行以及编码难度都不大,各种语言都提供MD5支持,开发快​​​​​​​​​​​​​​

4.使用非对称加密(RSA加密)

使用RSA密钥对,前端保留公钥文件,服务器后端保留私钥文件,每次登录时,前端使用公钥对密码进行加密,后端使用私钥解密。



不管在什么协议之下,可以看到实际发送的HTTP/HTTPS报文在MD5处理后是这样的:

这样就安全了吗???

不是的。因为攻击者并不一定要获取到你的密码明文,如果直接截获你的密码密文,然后发送给服务器不是一样可以登录吗?因为数据库里的不也是MD5(password)的一样的密文吗?HTTP请求被伪造,一样可以登录成功。

5.加上Token令牌 / 验证码

  • 在用户登录之前,服务器缓存生成随机的验证字段(设置有效时间),并发送给客户端。
  • 当客户端用户输入完账号信息,点击登录后,把这个字段一并传给服务器,用于校验。
  • 校验完成后,服务端删除缓存中的验证字段。

每次从服务器中获取认证的token,确实能保证HTTP请求是由前端传回来的了,因为token在每次登陆后都会删除并被重置,会导致黑客尝试重放账号密码数据信息来登陆的时候导致无法成功登陆。

总而言之,就是我拿到了账号以及密码的密文也登陆不了,因为,如果请求不包含后台认证的令牌token,是个非法请求。

总结

低配版用户安全:只对密码进行简单的MD5加密后传给后台。攻击者压根不需要破解出密码的明文,只需要用它截取到的用户名和MD5加密后的密码作为参数然后直接调你网站的登录接口就好了,因为通常登录接口都是完全暴露的(即任何人都可以调用),校验通过后攻击者拿到授权令牌,接下来就可以为所欲为了。

中配版用户安全:非对称加密。使用RSA密钥对,前端保留公钥文件,服务器后端保留私钥文件,每次登录时,前端使用公钥对密码进行加密,后端使用私钥解密,乍一看,这个应该挺安全了,毕竟使用公钥加密后,每次加密后得到的字符串都是不一样的;但是只是不一样,并不是不能用!如果攻击者拿着这个用户名和公钥加密后的密码直接调用你的登录接口,一样能登录成功,并获得授权令牌。
高配版用户安全:Token令牌。用户每次登录时,由服务端生成一个随机密钥对,将公钥返回给前端,私钥保存到服务器,并设置该密钥对的有效期为30分钟(有效时间大家随意),用户登录的时候,要求前端对用户的明文密码进行公钥加密后传给后端,然后后端用私钥对密码进行解密,然后与数据库保存的密码进行匹配,登录成功之后,服务器立即清除这个密钥对。这样即使攻击者拦截到了加密后的密码,并用这个加密后的密码再次伪造登录,也无法成功。

6.防止数据篡改、数据伪造

当请求路由到黑客这边的时候,截获数据包,然后也不需要登录,反正账号密码都是对的,token也是对的,那么把数据包的字段改改,搞破坏就可以了。

如何解决可以看这篇:

HTTPS 的加密过程 详解-CSDN博客

 “数字指纹“是HTTPS能确保数据完整性和防篡改的根本原因。(它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的内容信息其摘要必定一致。)

“数字签名”保证消息不会被冒充、不会被整个替换。

5.参考

原文链接:https://blog.csdn.net/weixin_42023666/article/details/89706659

原文链接:面试官:设计一个安全的登录都要考虑哪些?我一脸懵逼。。-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql 16开启SELINUX

平时我们习惯了,安装数据库,就关闭SELINUX,不关闭SELINUX,就不会安装数据库了,那么不关闭SELINUX,就不能安装数据库了吗? 答案是否定的。 不过,如果我们在开启SELINUX情况下安装PG…

Matlab类阿克曼车机器人运动学演示

v1是后驱动轮轮速, v2是转向角变化速度, 实际上我们只需要关注XQ, YQ和Phi的变化率。 通过这三项和时间步长, 我们就可以计算出变化量, 再结合初始值就能推断出每个时刻的值。 % 清理当前运行环境 % 清除所有变量 cle…

python身份证实名认证接口调用方法、返回值说明、示例代码

越来越多的企业进军互联网平台,对于身份证实名认证接口功能的需求也在不断的增多,对此,翔云人工智能开放平台提供了可满足不同应用场景需求的身份证实名认证接口服务,即身份证二要素、三要素认证,可通过身份证号码姓名…

opencv使用KCF算法跟踪目标,给出目标中心位置

效果图 代码 import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path video_pathself.cap cv2.VideoCapture(video_path)self.tracker cv2.legacy.TrackerKCF_create()self.initBB Noneself.tracker_initialized Falseself.selecting Fals…

C++,Python 论文复现:使用单位四元数求解对齐轨迹的 Sim3

参考文献: Closed-form solution of absolute orientation using unit quaternions 在 SLAM 中, 轨迹会因为因为起始位姿、尺度设定的不同而不同 在轨迹形状大致相同时, 可以求取一个相似变换使得两个轨迹尽可能重合 给定两个分别具有 n n n 个空间点的轨迹, 分别定义为: …

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的,太老了,更换为powershell7后,在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…

C语言——初识结构体定义与使用

C语言中的结构体(Struct)是一种复合数据类型,它允许你将不同类型的数据项组合成一个单一的类型。结构体在C语言中非常有用,特别是在需要处理复杂数据时,比如存储一个人的姓名、年龄、地址等信息时,使用结构…

回调函数简易笔记

定义 回调函数:用户手动定义了,但是没有手动调用,最终这个方法被系统/库/框架进行调用了… 举例 C语言 函数指针,主要有两个用途. 作为回调函数实现转移表 降低代码的复杂程度 java 数据结构 优先级队列(堆) 必须先定义好对象的"比较规则" Comparable compare…

2836. 在传球游戏中最大化函数值

Powered by:NEFU AB-IN Link 文章目录 2836. 在传球游戏中最大化函数值题意思路代码 2836. 在传球游戏中最大化函数值 题意 给你一个长度为 n 下标从 0 开始的整数数组 receiver 和一个整数 k 。 总共有 n 名玩家,玩家 编号 互不相同,且为 [0, n - 1…

韦东山嵌入式linux系列-异常与中断的概念及处理流程

1 中断的引入 一些概念: 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运…

RuoYi-Vue-Plus(动态添加移除数据源)

一、添加数据 private final DynamicRoutingDataSource dynamicRoutingDataSource;private final DefaultDataSourceCreator dataSourceCreator;//添加一个dynamic的数据源@GetMapping("createDynamic")public void createDynamic() {DataSourceProperty property =…

数据结构第二讲:顺序表

数据结构第二讲:顺序表 1.线性表2.什么是顺序表3. 静态顺序表4.动态顺序表4.1顺序表基础4.2顺序表的初始化4.3顺序表的销毁4.4顺序表的尾插4.5顺序表的头插4.6顺序表的尾删4.7顺序表的头删4.8顺序表在指定位置之前插入数据4.9顺序表删除指定位置的数据4.10顺序表查找…

JNPF全新V5.0版本!重磅升级——全局优化篇

尊敬的JNPF用户们: 我们非常高兴地宣布,经过团队数月的辛勤努力和不断的技术创新,JNPF快速开发平台终于迎来了里程碑式的全新升级——V5.0版本!这一版本的更新发布,不仅代表着我们技术实力的进一步提升,是…

Visual stdio code 运行C项目环境搭建

参考 [1]VS Code 配置 C/C 编程运行环境(保姆级教程)_visual studio code c配置-CSDN博客 [2]最新VS code配置C/C环境(tasks.json, launch.json,c_cpp_properties.json)及运行多个文件、配置Cmake_vscode launch.json如何配置-CSDN博客 先装visual stdi…

【高频面试题】java实现堆排序算法

目录 1.堆排序算法原理 1)构建初始堆 2)堆调整与排序 3)时间复杂度 2.java代码实现(可运行) 1.堆排序算法原理 1)构建初始堆 将待排序的数组元素构建成一个最大堆(或最小堆) …

谷歌搜索提取工具

谷歌搜索提取工具是指能够帮助用户从谷歌搜索引擎中提取所需信息的工具或插件。这些工具通常具有强大的数据抓取和分析能力&#xff0c;能够自动化地收集和处理搜索结果中的数据&#xff0c;从而为用户提供更加便捷和高效的信息获取方式。文本介绍专业工具<大镜山谷歌搜索大…

了解LR(逻辑回归)一

逻辑回归&#xff1a;一种强大的分类模型 逻辑回归&#xff08;Logistic Regression&#xff0c;简称LR&#xff09;是一种在统计学和机器学习中广泛应用的分类模型&#xff0c;尽管其名称中包含“回归”二字&#xff0c;但实际上它主要用于处理分类问题&#xff0c;特别是二分…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是一种复杂的机器学习模型&#xff0c;其特点在于包含多个隐藏层&#xff0c;从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍&#xff1a; 一、基本概念 深度…

el-table列的显示与隐藏

需求&#xff1a;实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑&#xff0c;和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段&#xff0c;并且 当表无数据时 提示不能 显示隐藏 …

Flink-CDC解析(第47天)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC&#xff1f;1.2 CDC的实现机制1) 基于主动查询的 CDC&#xff1a;2) 基于事件接收CDC&#xff1a; 前言 本文主要概述了Flink-CDC. …