有关后端开发的密码存储安全问题

后端安全问题解决方案汇总 阅读详情

关于密码,为什么加盐更安全?怎么保证密码存储安全?

首先,hash是不可逆的,正常情况下,不能通过哈希值直接反推出原始密码,因为哈希函数是单向函数,不具备可逆性。不过,攻击者总有办法。

第一,关于攻击

攻击者想攻击你的密码,需要满足这两个前提:
1)他能拿到你的密码的哈希编码
2)他知道你的加密算法
对于1),它可以攻克你的数据库或者其他方法来拿到,比如有这些:

泄露路径描述
数据库泄露攻击者通过SQL注入 [1]、数据库权限提升、备份泄露等方式,获取整个用户表,其中可能包含哈希值和 salt
Web日志泄露登录接口或调试输出中不小心打印了哈希值(比如服务端日志或响应报错)
Git泄露开发者把测试用的哈希值写死在代码,并提交到了公开仓库
后端接口不当某些接口返回用户信息时把密码哈希值也顺带返回了
缓存服务被攻破比如 Redis、Memcached 中存了密码摘要或完整用户信息
内鬼行为公司内部人员或离职员工故意导出或泄漏哈希数据

对于2),它可以有这些方法:

泄露路径描述
代码泄露比如github公开仓库、apk/ipa/exe都可以反编译、内部泄露
从已知哈希看出常用的hash算法就那几种,一看大概样子就知道是哪个了 [2]

有了这两个前提之后,攻击者就可以攻击你的密码了,主要是这两个方法:
1)暴力破解
2)彩虹表、字典表

对于1)暴力破解,为了存储方便,一般hash算法是超级快的,比如MD5、SHA-256,每秒可以进行上百万次加密。所以利用GPU完全可以暴力破解,找到有相同hash的就是密码。

对于2)彩虹表/字典表,彩虹表就是存了对这些hash算法的已知密码和对应hash的一张表,拿到hash之后就可以在表里直接找到对应密码;字典表就是存了一些常用密码,比如123456,这种破解效率超级高。

第二,关于后端存储

设计理念应该是默认攻击者知道你所有的代码、算法逻辑,然后依然能保证密码不被反推出。
首先,把密码明文存在数据库是绝对不可取的;
其次,根据上面所说,如果对安全性有高要求,存md5这种简单hash也不行;
不过,可以有这些方法:
1)加盐(salt)
2)慢加密
3)双重验证、动态口令

对于1),就是在使用一般hash算法加密的时候,不直接给密码加密,而是先给密码加一个附加内容,然后再算hash,这样彩虹表就失效了,只能针对你的系统重新建彩虹表;而如果这个附加内容是完全随机的,那么对于完全相同的两个密码,加盐加密后的hash就完全不同了,这样彩虹表就完全失效了。他只能暴力破解,而密码+盐,破解起来就比较费时了。对于每个密码都会有一个随机盐值,跟着hash一起存在数据库里。
图片来自阿里云开发者社区
(图片来自阿里云开发者社区https://developer.aliyun.com/article/1618090)

对于2),最好是先加盐,然后配合慢加密,就是加密一次要比较久(比如多次哈希,1000次哈希,这样就比较久了),这样他暴力破解就得更加耗时了。变成了很难完成的任务。这里有一些经过互联网检验的加密算法:

算法特点
PBKDF2随机盐+超多次哈希,参数可设置
bcrypt自动加盐,运行速度可配置,广泛应用
scrypt除了慢,还对内存要求高,抗GPU破解
Argon2最先进的密码哈希算法,2020年起逐渐成为新标准

Argon2是内存硬(memory-hard)算法,意思是要消耗大量RAM才能运行。这让用GPU/ASIC进行大规模并行破解变得很慢、效率极低。相比之下,bcrypt/scrypt在硬件上更容易被优化并行。不过,Argon2运行一次hash都得100ms以上了,高负载高吞吐量需求的场景下可能不太ok,得权衡利弊根据实际需求选择算法。

对于3),直接不存密码更安全,你的系统可以只做验证码登录或者验证码双重验证,但是验证码可以被截获。。。也可以做TOTP(动态口令),这个更安全,可以用Google Authenticator、Authy等app生成验证码,比如Jira用的就是Google的这个动态口令。

第三,其他

1)为什么不自己设计hash函数,这样彩虹表就失效了
密码学界有一个经典名言:Don’t roll your own crypto不要自己发明加密算法。
还有一个原则:Kerckhoffs 原则:一个加密系统的安全性应该只依赖于密钥的保密性,而不是算法的保密性。就是说:安全系统必须默认攻击者迟早能拿到你的算法实现,所以我们不能靠“隐藏逻辑”来防止破解,安全性必须来自算法本身具有抗碰撞、抗反推、抗爆破能力。
一个是如上面所说源码容易泄露,攻击者很容易能看到你的加密方法;
第二个自己设计要加盐、慢计算、自动升级参数,还要满足avalanche Effect(雪崩效应,就是密码稍微改动一点点,hash结果就得有巨大变化才行,要不然很容易反推出加密逻辑),一旦有一点没有设计好,就等于白弄;
第三是,所谓自定义hash通常是:
拼接字符串 + 多次哈希(比如 SHA256(SHA1(password)))
加一些混淆的逻辑(比如插入字符、换顺序)
自己设计的哈希函数(甚至用数学公式)
但其实攻击者总能逆向出你的逻辑。逆向工程、已知明文攻击、差分分析、构造反向字典、碰撞攻击,有兴趣的可以一起讨论。
因此,还是推荐就用已经经过严格审计与学术验证的密码学方法,就比如上面提到的Argon2等。而且他们也支持定制,比如:可以调整bcrypt的cost参数,控制哈希的慢速程度;加盐的时候可以加入用户UID或时间戳,提高唯一性之类的。
.
.
.

[1]SQL注入
发生在没有对用户输入做严格校验,而且没有使用预编译/参数化查询的情况下。
也就是把用户输入直接当作sql的一部分,攻击者就可以在输入框里注入恶意sql。
比如:
对于登录功能,用户输入userName,后端直接拿它去查数据库:

*“select username, hash, salt from user_table where username=’”+userName+”’”*

如果攻击者输入是:’ or ‘1’=‘1’,这样运行到数据库的sql就是:

*select username, hash, salt from user_table where username=’’ or ‘1’=‘1’*

这样查询条件永远是真,就有可能绕过验证了,或者攻击者用更复杂的sql注入,有可能直接拿到全表。
这里说明一下java的安全写法,以mybatis为例:

<select id="login" resultType="User">
  SELECT * FROM user_table 
  WHERE username = #{username} AND password = #{password}
</select>*

这里的SQL会先被数据库预编译成结构,然后把用户输入当作参数传进去,这样就不会当作代码执行了。也就是说,他会去数据库查username=’ or ‘1’=‘1’的用户,而不是把’ or ‘1’=‘1’浅浅地当作sql的一部分了。

[2]常见hash算法的结果样式

哈希函数输出长度示例
MD532位十六进制5f4dcc3b5aa765d61d8327deb882cf99
SHA-140位十六进制5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
SHA-25664位十六进制5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
bcrypt60位带2b2b2b等前缀$2b121212eImiTXuWVxfM37uY4JANj.QzbY8Xf1HnUZyC8Hq4cclqkGQz9f2q.
Django学生选课系统登录模块开发实战 用户认证系统是现代Web应用的基础组件,其核心原理是通过会话管理实现状态保持。Django框架内置的认证模块提供了完整的解决方案,包括表单验证、密码加密和CSRF防护等安全机制。在工程实践中,合理的角色划分和权限控制能有效提升系统安全性,如本案例中的学生/教师双角色设计。通过Django的MTV模式,开发者可以快速实现包含模型定义、视图逻辑和模板渲染的完整登录流程。这类基础功能模块在教务管理系统、企业OA等场景中具有广泛应用,其中会话管理和密码存储优化是保障系统安全的关键技术点。 阅读详情

相关推荐

你的密码存储方式是否在向黑客招手?

title: 你的密码存储方式是否在向黑客招手?excerpt:现代Web应用中,密码安全的核心在于验证用户身份的同时不存储原始密码。早期方案如明文存储、简单加密和弱哈希算法(如MD5)存在重大风险,易被破解。现代密码哈希技术通过增加计算耗时、使用随机盐值和抗GPU算法(如bcrypt、scrypt、Argon2)来增强安全性。Bcrypt实现方案包括生成唯一盐值和哈希密码,验证时通过对比哈希值确认密码正确性。安全增强策略包括密码复杂度验证和登录频率限制。

https://blog.cmdragon.cn/ 649

web后端python安全-总结

Python的import关键字--不⽤⾃⼰从零写功能,直接⽤别⼈封装好的成熟代码。写爬⾍不⽤⾃⼰写⽹络请求代码,导⼊requests库就能直接⽤Python爬⾍编写(爬⽹络数字的工具)Python Web 后端80% 的漏洞来自注入、越权、明文密码、配置泄露优先修复SQL 注入、越权访问、密码明文三个最高危漏洞使用框架自带安全机制(Django/Flask 安全能力很强)不要信任任何用户输入、请求、文件开启 HTTPS + 安全响应头依赖包定期扫描漏洞使用 环境变量。

knyml的博客 205

SpringBoot密码安全存储实战:从哈希加盐到BCrypt与Argon2

在用户认证系统中,密码安全存储是保障数据安全的核心基础。其核心原理在于使用不可逆的哈希函数,将用户密码转换为唯一的“指纹”,而非存储明文,从而确保即使数据泄露,攻击者也无法直接获取原始密码。为了应对彩虹表等攻击,现代方案普遍采用加盐技术,即为每个密码附加随机字符串后再哈希,确保相同密码的哈希值也不同。在此基础上,适应性哈希算法通过动态调整计算成本(如工作因子),有效抵御硬件暴力破解,显著提升了技术价值。在Java生态中,Spring Security提供的PasswordEncoder组件将这些原理工程化,

weixin_34254464的博客 258

外卖项目,登录设计,nginx反向代理,MD5明文加密

为什么前端不能直接发请求,请求tomcat服务器,而是通过nginx反向代理转发一次请求呢。登录成功后,生成jwt令牌。

weixin_43669384的博客 538

FastAPI安全认证:从密码到令牌的魔法之旅

在FastAPI中实现OAuth2密码流程的认证机制。通过创建令牌端点,用户可以使用用户名和密码获取JWT访问令牌。代码示例展示了如何使用 CryptContext 进行密码哈希处理,生成和验证JWT令牌,并实现安全路由保护。此外,还提供了JWT令牌的结构解析、常见报错解决方案以及安全增强建议,如使用HTTPS传输令牌和从环境变量读取密钥。最后,通过课后Quiz巩固了关键概念。

https://blog.cmdragon.cn/ 1411

密码存储安全演进:从哈希、加盐到Argon2与多因素认证

密码哈希是用户认证和数据安全的核心基础技术,其核心原理在于利用单向散列函数将密码转化为不可逆的固定长度字符串,确保即使数据泄露,原始密码也难以被还原。这项技术的核心价值在于为系统建立被破解的防线,大幅提升攻击者的时间与计算成本。在实际工程中,为了应对彩虹表攻击和暴力破解,引入了盐值和慢哈希机制,通过为每个密码添加唯一随机盐值,并故意增加哈希计算耗时,有效抵御了预计算攻击。随着硬件算力提升,自适应哈希算法如bcrypt、scrypt和当前推荐的Argon2成为现代标准,它们通过可调节的时间、内存及并行度参数,

weixin_29322855的博客 326

如何安全地存储密码

 无论是开发App还是网站,只要有用户登录环节,就会牵涉到如何存储用户的密码的问题。如果采用的存储密码的技术不够安全,一旦黑客闯入存储密码的数据库,他就能获取用户的密码从而可能给用户带来重大损失。这种情形任何公司都不希望发生在自己身上,因此选择安全地存储密码的策略显得十分必要。 不一定非要自己存储用户的密码 最简单的存储密码的方式就是自己并不存储,而是委托给信任的第三方存储。

何海涛的专栏 1万+

如何安全存储密码? 后端

相反,我们应该使用哈希函数将密码转换为哈希值,并将哈希值存储在数据库中。相反,我们应该使用哈希函数将密码转换为哈希值,并将哈希值存储在数据库中。每个用户的盐值都应该是唯一的,并且与密码一起存储在数据库中。每个用户的盐值都应该是唯一的,并且与密码一起存储在数据库中。在上面的示例中,我们使用SHA-256哈希函数对密码进行哈希处理,并将结果以十六进制字符串的形式存储在数据库中。在上面的示例中,我们使用SHA-256哈希函数对密码进行哈希处理,并将结果以十六进制字符串的形式存储在数据库中。

BugTO的博客 1500

PHP编程语言与数据库技术学习心得

本文总结了PHP与数据库技术的学习要点,包括PHP基础语法、面向对象编程、错误处理机制以及MySQL数据库设计与优化。重点介绍了使用PDO进行数据库连接和安全操作,防止SQL注入等安全措施。文章通过代码示例展示了变量类型、类封装、预处理语句等核心知识点,并提供了数据库表结构设计和索引优化策略,为构建安全高效的Web应用提供了实用指导。

wangzhen5257的博客 172

Web应用安全漏洞与后端开发

在本文中,我们讨论了一些常见的Web应用安全漏洞,并提供了一些后端开发的最佳实践来减少这些漏洞的风险。通过采取适当的安全措施和实施良好的编码实践,开发人员可以增强Web应用程序的安全性,并保护用户的敏感数据。请记住,Web应用程序的安全性是一个持续的过程,需要定期审查和更新以适应不断变化的安全威胁。随着用户对在线服务的需求不断增长,保护用户数据和确保应用程序的安全性变得至关重要。本文将探讨一些常见的Web应用安全漏洞,并提供一些后端开发的最佳实践,以帮助减少这些漏洞的风险。Web应用安全漏洞与后端开发。

YOLOv7895的博客 75

构建安全的密码学网站后端:Java实现

本文还有配套的精品资源,点击获取 简介:项目"EjemploCriptoBack:密码学网站后端"是一个展示密码学在信息安全中应用的Java后端项目。密码学的核心领域如数据加密、解密、数字签名和哈希函数是关键组成部分。项目可能包含教学代码示例,展示了如何在Java环境下实现安全特性。通过研究和实践,开发者可以掌握后端服务中处理敏感信息的方法和构建安全网络服务的技能。 ...

weixin_33557333的博客 1631

总结后端开发常见安全问题及应对方案

后端安全

LuckyTHP 1843

hcaptcha逆向实战:从API解析到参数构造的完整链路

本文详细拆解了hcaptcha验证码的逆向实战流程,从环境准备、捕获API与版本号,到解析核心加密逻辑hsw.js,再到构造getcaptcha请求参数,最后完成验证提交。文章重点剖析了motionData、n、c等关键参数的获取与构造方法,为开发者模拟浏览器行为、实现自动化验证提供了清晰的完整链路指南。

ik678901的博客 629

密码传输和存储,如何保证数据安全?

本文从一个输入密码登录场景说起,详细介绍了密码传输过程的改进和思路,最后展现出一个相对安全的传输和存储方案。点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达场景在互联网项目中,我们经常会遇到以下场景:用户注册,输入验证码传输到后端保存用户登录,前端输入密码传输到后端验证用户支付,需要输入支付密码传输到后端验证在上述场景中都涉及到了密码涉的传输和存储。这就产生了一个问题,密码作为用户的...

Daniel的博客 2557

使用 Python 和可视化编程控制树莓派机械臂myCobot

这些模块包括逻辑、循环、数学、文本、列表、颜色、变量、函数以及控制机械臂的函数等等,所以用户可以轻松入门编程,只需单击右上角的运行就可以启动程序,做一些有趣的应用。可以搭配任意摄像头进行图像识别,具有4个 USB 端口,可以通过 Raspberry Pi 的微型 HDMI 端口连接到显示器. 最后,40 个GPIO 接头可以进行更多扩展应用,机械臂每个接口都有清晰的标记,面板上还有一个电源开关和一个直流电源插孔。您现在可以将机器人放在地板或桌子上,并用力拧紧吸盘,以确保机械臂的底座在操作过程中不会移动。

m0_62456998的博客 3965

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 595

后端开发中常见的安全问题有哪些,如何防范?

在后端开发中,常见的安全问题包括SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、敏感信息泄露等。这些问题可能导致用户数据被盗、系统被非法控制等严重后果。:对所有用户输入进行严格的验证和过滤,以防止恶意数据进入系统。例如,限制输入长度和特殊字符,并使用过滤器统一处理输入。:对敏感数据进行加密存储,确保即使数据被非法访问也无法被解读。此外,使用HTTPS协议来保护数据在传输过程中的安全性。:确保只有经过身份验证的用户能够访问和执行相应的操作。

破损的天堂鸟博客 1271

重磅!Repo Wiki!

RepoWiki是Qoder平台的智能文档生成功能,通过静态代码分析自动提取项目架构、模块依赖和核心逻辑,并持续追踪代码变更保持文档同步。其工作流程分为四个阶段:1)代码扫描与AST解析;2)结构分析与依赖映射;3)文档智能生成;4)增量更新机制。支持多种编程语言,能识别设计模式并推断技术决策,适用于新项目搭建和遗留系统维护。优势在于降低理解成本和提高开发效率,但存在文件数量限制和依赖Git的局限性。典型应用场景包括自动生成架构图、API手册和团队知识沉淀。

ayusong870的博客 4020

也谈用户登录注册

  早上看了一篇文章无废话MVC入门教程九[实战一:用户注册与登陆],被无废话、实战 这些强有力的字眼所吸引,拜读之。本文目标:一、独立开发用户注册与登陆!读完发现很欠妥当,于是评论了一下,被博主强烈反驳。本人才浅,也许言语很欠妥当罢,在此给那位博主道个歉。   注册和登录几乎是每个web必备的模块,通常面试的时候也会简单和面试者讨论下。 个人感觉做注册和登录需要考虑以下两点: 用...

weixin_30567471的博客 139

期货缠论实战:文华财经笔中枢指标公式解析与博易大师应用指南

本文深入解析期货缠论实战中的文华财经笔中枢指标公式及其在博易大师平台的应用技巧。详细介绍了笔中枢指标的核心逻辑、公式拆解、参数设置及多周期联合作战策略,帮助交易者提升市场分析能力与交易胜率。特别适合期货交易者学习缠论指标的实际应用。

weixin_42522552的博客 356

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5416

使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)

shiro加盐,加密,数据库加密存储

jakelihua 2387

计算机视觉论文复现指南:从理论到可运行代码的保姆级教程

计算机视觉论文复现指南:从理论到可运行代码的保姆级教程​ ,人工智能,计算机视觉,大模型,AI,本文围绕计算机视觉论文复现展开,介绍从理论到可运行代码的全流程。先强调复现的重要性,再讲解复现前的准备,包括明确目标、构建工具链;接着说明代码获取分析、环境配置调优、调试运行技巧及结果验证优化方法,还推荐了高效工具,提及复现中的伦理规范。旨在助读者掌握复现方法论,实现从经典模型到前沿论文的复现,推动学术成果落地。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+
上一篇: 用Python实现一个轻量级图像标注工具
下一篇: 动态IP的白名单管理问题
我认为可以!
博客等级 码龄6年 345粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值