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

news2024/11/20 3:29:08

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.coloradmin.cn/o/1954937.html

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

相关文章

windows环境 python + opencv 加载 onnx 人脸检测模型识别人脸测试

参考博客: 1. OpenCV-Python 4.5.4 人脸识别应用:https://blog.csdn.net/qq_36563273/article/details/121510440( 代码就是在此博客代码基础上改的,主要添加了人脸画框的逻辑 ) 1. windows环境:win11 2. 安装 miniconda2-4.7.1…

用python解释进程与协程(python实例二十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.创建进程池,异步执行多个任务 3.1 代码构思 3.2 代码示例 3.3 运行结果 4. 模拟协程堵塞 4.1 代码构思 4.2 代码示例 4.3 运行结果 5.总结 1.认识Python Python 是一个高…

算法019:x的平方根

x的平方根. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/sqrtx/ 这个题乍一看很奇怪,但是换个角度,我们用二分查找的思想来完成这个题。 …

组队学习——决策树(以泰坦尼克号公共数据集为例)

本次我们挑战的数据集为泰坦尼克号公共数据集,为了降低难度,我们在原有数据集的基础上进行了优化,具体数据集介绍如下: 在这里也介绍一下数据的含义吧 数据介绍: Survived:是否存活(label&#…

巧用外部资源加速任务执行

1. 背景 在人工智能时代,对算力的要求越来越高,为了加速任务的执行,可以削减软件层面的干扰以充分挖掘本机的硬件算力,具体可参考前面的文章。 若充分挖掘本机硬件能力之后还显不足,就需要增加硬件或提高硬件配置&am…

【小程序爬虫入门实战】使用Python爬取易题库

文章目录 1. 写在前面2. 抓包分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研…

pinia定义store及其简单的使用

定义store 在使用pinia管理状态之前,我们得知道 Store 是用 defineStore() 定义的,它的第一个参数要求是一个独一无二的名字: import { defineStore } from "pinia";// 你可以任意命名 defineStore() 的返回值,但最好使用 store 的…

C语言 #指针数组 #数组指针 #数组参数、指针参数

文章目录 前言 一、指针数组 1、概念: 2、指针数组有什么用呢? 二、数组指针 1、数组指针的定义 2、数组名与 &数组名 的区别 3、数组指针如何初始化? 4、数组指针的用法 三、根据代码区分 指针数组 和 数组指针 四、数组参数、指针参数 …

【PYTHON】多进程运行示例含共享数据

运行结果 Python多进程调用示例 import multiprocessing import time import os import sys# 注册多个函数用于不同进程分别调用 def testcase0():time.sleep(1)return "case0_"+get_time()def testcase1(timestamp):return "case1_"+timestampdef testca…

使用Spring Boot与Spire.Doc实现Word文档的多样化操作

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 使用Spring Boot与Spire.Doc实现Word文档的多样化操作具有以下优势: 强大的功能组合:Spring Boot提供了快速构建独立和生产级的Spring应用程序的能力,而Spire.Doc则…

CSS(三)——CSS 背景

CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 背景属性 Property描述background简写属性,作用是将背景属性设置在一个声明中。background-attachment背景图像是否固定或者随着页面的其余部分滚动。background-color设置元素的背景颜色。background-image把…

MySQL查询执行(二):order by工作原理

假设你要查询城市是“杭州”的所有人名字, 并且按照姓名排序返回前1000个人的姓名、 年龄。 假设这个表的部分定义是这样的: -- 创建表t CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT N…

240728pycharm使用问题之无法找到指定命令

文章目录 1.问题描述2.分析3.解决后界面展示 1.问题描述 pycharm中断报错,让你初始化powershell,并且说找不到anconda中指定命令,很明显anaconda环境配置不对 2.分析 1.检查anaconda环境变量配置是否ok; 2.检查pycharm终端配置是否ok 3.检查pyacharm环境配置 3.解决后界面展…

第一期:AI芯片——智能时代的“芯”跳加速器

🌟 小竹笋的AI奇旅 🚀 Hey小伙伴们!👋 我是小竹笋,一名喜欢捣鼓技术、热爱创作的工程师。从今天开始,我们将踏上一场关于人工智能(AI)核心技术领域的探索之旅。第一站,我…

MarkTool之UDP

UDP客户端,主要作用是与UDP服务端连接进行数据通讯 1、连接参数有4个,绑定IP和Port,服务端IP和Port 2、接收数据和发送数据的参数设置,有16进制,有字符,有原始数据,都可进行选择 3、定时发送&a…

大数据时代,区块链是如何助力数据开放共享的?

在大数据时代,区块链技术以其独特的优势,为数据开放共享提供了强有力的支持。以下是区块链助力数据开放共享的几个主要方面: 1. 增强数据安全性与隐私保护 加密安全:区块链技术采用先进的加密算法,如国密非对称加密技…

安装Keil5 MDK

文章目录 前言一、安装Keil5 MDK 软件以及器件支持包1. 器件支持包离线安装方式2. 器件支持包在线安装方式 二、软件注册三、驱动安装1. 安装STLINK驱动2. 安装USB转串口驱动 前言 提示:本文主要用作在学习江协科大STM32入门教程后做的归纳总结笔记,旨在…

LangChain--如何使用大模型

【🍊易编橙终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 LangCha…

x64dbg反汇编技术入门学习笔记

EIP EIP是程序下一次要运行地方 寄存器 临时存放数据,按照Intel规定去存放 window API 微软提供的,用户可以操作系统的一些接口,以函数的形式体现 杀软是如何查杀恶意的 镜像地址 实际地址 实际运行后代码的地址 查外部调用段就可以定位到.rdat…

vscode 根据不同语言项目自定义配置项(插件版本)

2024.7.28 天微热,心情燥。 前文,如果我们是一个全栈开发者,我们想在写前端项目时只让vscode加载前端的插件,写后端的时候只加载后端的插件,该如何配置呢? 1. 通过配置 workspace 这里大家都会&#xff0…