登录过程中密码的安全和攻击风险

本文探讨了移动应用开发中用户登录过程中的密码安全问题,强调了不应保存密码明文或哈希值,提倡使用加盐哈希和随机数结合的方式增强密码安全性。还提到了注册流程设计的重要性,以防止SQL注入、彩虹表攻击、重放攻击等风险,并建议使用HTTPS和动态密码来确保信息传输的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们在开发app客户端的时候,最主要的一个模块就是用户登陆模块,其中用户密码的验证和保存流程是极易引起安全风险,各种注入攻击、重放攻击、拖库风险等,都会危机到用户的账号安全,今天从用户登陆密码验证流程角度探讨下密码安全。

1 服务器端不要保存密码明文

首先,服务器端不要保存密码明文,因为攻击者甚至不需要很高深的技术,利用SQL注入就可以获取所有的明文密码,后果严重。

SQL注入: 它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力, 它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

假设我们在浏览器中输入URL www.sample.com,由于它只是对页面的简单请求无需对数据库动进行动态请求,所以它不存在SQL Injection,当我们输入www.sample.com?testid=23时,我们在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),所以我们可以在该URL中嵌入恶意SQL语句。

2 服务器端也不能保存密码的哈希值

按理说哈希值是单向的,不可能被逆向,但是这世界上竟然
有查表(彩虹表)攻击。
彩虹表攻击: 攻击者可以先行建立一张"所有"明文密码到哈希值的对应表,这样拿到一个哈希值几秒钟就能获取其对应的明文密码。假设网站有10万注册用户,并且其中10%的用户密码很简单,那攻击者通过简单的查表也许几个小时就能获得这1万用户的明文密码。

3 密码加盐

服务器端的密码应该保存"加盐"(salting password)后的哈希值,
加盐: 所谓加盐是指在密码前加一串随机字符串,注意不能用固定的字符串加盐,因为假如盐固定,那攻击者还是能事先建立起彩虹表,那就回到了上面的规则2,所以应该每个用户用不同的随机盐。

怎么保证每个用户不同的盐值:
可以简单的,定义一种算法,将用户ID变换成盐值。
也可以通过一定机制弄成随机盐,更加安全。

4 注意客户端保存的密码

因为有自动登录的要求,所以客户端也有保存用户密码的需求,客户端密码更应注意密码安全,客户端保存密码的规则可以参照服务器保存密码的规则。

5 避免传送明文密码

客户端不能传送明文密码到服务器作登录校验,在用户和服务器之间有太多恶意设备的可能(嗅探,代理,AP,路由器…),有的客户端甚至用GET传递明文密码,那普通的代理log就把用户密码给泄露了。

6 避免直接传送密码哈希

客户端也不能传送密码哈希值到服务器,一个原因是规则2的彩虹表,另一个原因是对于你个人,黑客甚至不需要破解到明文密码,复用这个哈希值就可以登录某人账户了。

7 不能把加盐的哈希值传到服务器

虽然客户端传送加盐的哈希值可以避免彩虹表攻击,但是由于该哈希值是固定的,黑客还是能复用该值,进行重放攻击。

8 增加随机数一起做哈希

作为登录校验的值必须是不固定的,由于密码和盐是固定的,所以必须加入个随机值一起做哈希。客户端可以预先从服务器处获取个随机值(比如时间戳),然后和加了盐的密码哈希再哈希一次。这样就算是中间人(MITM)攻击也无效。
使用随机值哈希流程:
(1) 认证服务器内部产生一个随机数,作为Challenge,发送给用户;
(2)客户将口令和随机数合并,使用单向Hash函数 ( 例如MD5算法 ) 生成一个字节串作为Response;
(3)认证服务器将Response与自己的计算结果比较,如两者相同,则通过一次认证,反之认证失败;
(4)每次challenge不同,所以replay attack无效。

9 设计好注册流程

由于登录时服务器和用户共享个第三方无法知道的秘密(密码),因此简单的设计就能保证很高的安全性。难点在于注册阶段,因为要保证用户设置的密码(包括哈希值,包括加盐哈希值)不在网络上传输到服务器,这只能通过https或者短信注册来保证安全了,当然这2个方法本质上还是"服务器和用户共享个第三方无法知道的秘密",前者通过非对称加密的公钥私钥作秘密,后者通过网络黑客无法截获(手机没中病毒)的动态密码作秘密。

<think>好的,我现在需要帮助用户理解在vCenter登录过程中CookieSession ID的关系。用户之前已经询问过如何通过Cookie无口令连接vCenter,现在可能是在深入探讨认证机制。首先,我要确定用户的技术背景,可能他是在进行自动化运维或者集成开发,需要绕过常规认证,或者想了解安全机制。 接下来,我需要明确CookieSession ID在vCenter中的作用。vCenter使用基于SOAPREST的API,Session ID通常作为认证令牌。当用户通过用户名密码登录时,vCenter生成一个Session ID,存储在服务器端,并通过Cookie返回给客户端。之后,客户端在后续请求中携带该Cookie来维持会话。 用户可能想知道这两者如何交互,以及为何Cookie在认证中重要。需要解释清楚Session ID是服务器生成的唯一标识符,而Cookie是客户端存储传输该标识符的机制。此外,需要提到安全性,比如Cookie的HttpOnlySecure标志,以及Session的有效期,这些对用户的实际应用可能有影响。 可能还需要比较SOAPREST API的不同处理方式,比如SOAP使用vmware-session-id的Cookie,而REST使用vmware-api-session-id头部。用户可能在开发中遇到混合使用不同API的情况,需要明确两者的区别。 另外,用户可能关心如何通过Cookie维持会话,避免频繁输入密码,或者如何在自动化脚本中管理会话的有效期。需要提醒用户注意安全风险,如Cookie泄露可能导致未经授权的访问,建议使用官方推荐的认证方法,比如令牌或集成SSO。 最后,要确保回答结构清晰,分点解释,帮助用户逐步理解两者关系,并结合之前的回答,保持一致性。同时,语言要简洁,避免技术术语过多,但也要准确,确保用户能够正确应用这些知识到实际场景中。</think>在vCenter的登录会话管理中,**Cookie****Session ID**是密切关联但作用不同的两个核心概念。以下是它们的详细关系解析: --- ### 一、**Session ID 的本质** 1. **身份标识** - 当用户或客户端(如pyVmomi脚本)通过用户名/密码或令牌登录vCenter时,vCenter服务端会生成一个**唯一字符串**作为会话标识(Session ID)。 - 该Session ID保存在vCenter服务端内存或数据库中,关联当前用户的权限、操作上下文等信息。 2. **生命周期** - 默认有效期通常为**30分钟**(可通过vCenter配置调整)。 - 超时未活动或主动注销后,Session ID将失效。 --- ### 二、**Cookie 的作用** 1. **客户端存储机制** - vCenter通过HTTP响应头(`Set-Cookie`)将Session ID发送给客户端。 - 客户端(如浏览器、pyVmomi脚本)需在后续请求的HTTP头(`Cookie`)中携带此Session ID。 2. **典型Cookie格式** - SOAP API(如pyVmomi底层调用)使用Cookie名称:`vmware-session-id` 示例: ``` Cookie: vmware-session-id=4d53d9b4328f00e9dbe7b8f7a7649a0c ``` - REST API可能使用其他名称(如`vmware-api-session-id`)。 --- ### 三、**两者关系总结** | 特性 | Session ID | Cookie | |---------------------|--------------------------------|---------------------------------| | **存储位置** | 服务端 | 客户端(浏览器/脚本内存) | | **核心作用** | 服务端会话标识 | 客户端传输Session ID的载体 | | **安全性依赖** | 服务端保护 | 需防止泄露(如启用HTTPS+Secure属性) | --- ### 四、**关键流程示例** 以用户登录vCenter为例: 1. 用户提交用户名密码 → vCenter验证通过后生成Session ID(如`SESS_12345`)。 2. vCenter通过响应头`Set-Cookie: vmware-session-id=SESS_12345`下发Cookie。 3. 客户端后续请求自动携带`Cookie: vmware-session-id=SESS_12345` → vCenter通过Session ID识别用户身份。 --- ### 五、**安全机制** 1. **Cookie安全属性** - 推荐配置`Secure`(仅HTTPS传输)`HttpOnly`(禁止JavaScript访问)。 2. **会话固定攻击防御** - vCenter会在登录成功后更新Session ID,避免未授权复用。 --- ### 六、**开发注意事项** - 在脚本中若需复用Cookie: - 需手动保存响应中的`vmware-session-id`并注入后续请求。 - 需处理会话超时(如定期检测或自动续期)。 - 直接操作Cookie属于**底层实现**,官方更推荐使用SDK(如pyVmomi)封装的会话管理方法。 如果需要进一步了解如何通过Cookie实现会话复用或相关代码示例,可以继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

viqjeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值