求问:主流站点登录加密方式?

2020-12-21 11:56:05 +08:00
 acr0ss
我想请教一下,现在业界都怎么处理登录密码传输呢?

我看主流网站,百度、京东、淘宝和 qq 等,都会把登录密码加密传输,而且参数很多,是有什么通用加密规则吗?


未防止不必要的跑题、炫耀等,我事先声明,我了解:
1. 对称非对称加密基本知识
2. 可逆非可逆摘要算法基本知识
3. HTTPS 基本知识,包含不限于数字签名、信任机构、信任链等。


我只想了解:
1. 为什么加密
2. 加密的主流通用规则
5270 次点击
所在节点    程序员
69 条回复
3dwelcome
2020-12-21 12:28:22 +08:00
就是防止中间人嗅探密码吧,https 传输的证书也不是完全可信的。密码不加密的话,万一本地被注入了第三方根证书,那不就验证通过,直接看到密码了。
xmumiffy
2020-12-21 12:31:32 +08:00
没有,有些只是为了编码
xmumiffy
2020-12-21 12:32:44 +08:00
不过你说的这些站都是早期从 http 过来的系统,即使现在上了 https 也还在沿用以前的体系,反正不改也不会有问题
Mitt
2020-12-21 12:37:29 +08:00
你可以再对比下国外的主流网站,就会发现只有国内的普遍会二次加密,主要就是历史遗留,http 时代劫持和中间人问题太严重,加上国内的网络环境并不是那么理想
opengps
2020-12-21 12:42:17 +08:00
https 是防止网络中间传输过程中的暴露
客户端加密,是为了防止本机抓包工具等轻松看到密码明文
至于密码在加密之前的运算环节,虽然是公开的,但是难度摆在那,难度每高一层,就能轻松排除掉一层 90%的小白攻击者。
以前我网站有很多疯狂的爬虫,我只把 reffer 限制了一下,就轻松换来了清净。这个经历足够解释基础防御的重要性了。
westoy
2020-12-21 12:42:52 +08:00
这个其实就只是代表一种态度, 我平台没有你的明文密码

就算 http 时代, 意义也不大, 针对 input[type=password]搞定向劫持拿到加密前的明文和整个表单数据太容易了
systemcall
2020-12-21 12:45:44 +08:00
@westoy http 时代,ActiveX 的各种操作,上个网会往浏览器甚至系统里加不少东西
3dwelcome
2020-12-21 12:47:16 +08:00
简单看了一下 JD,有下面这些参数。
d: 03s0029nq3BQS9000001000g102001000h000001000j101001000e000001000g101000000h000001006l101000000b103001000h1040010...
c: c5b7bb1712a347d9a84998dc7b42dd24
w: 0
appId: 1604ebb2287
scene: login
product: bind-suspend
e: WBNPEK7FHYVGCTYUDSB4O5MO5LOZG5MALJQWPH6C6BGZPESVXB2J66SXYEFX26QQ654RBABHHR4CNA23UUERNDXTRM
s: 693759515443421745

第一个 D 参数特别的长,我也不知道为什么官方不用 16 进制,非要用一大堆 0 和 1 来表示,也许是这样看起来很酷。
具体参数吗,就是那些 nonce, 把密码散列化,非对称魔改算法。最后再加个 JS 签名验证防止非法篡改。都是百变不离其中。
xuanbg
2020-12-21 12:50:57 +08:00
后端生成一个动态的盐给前端,并且拿密码加盐 hash 作为 key 寸 redis,value 是用户 id 。前端对密码加盐进行 hash 后传输。后端直接在 redis 里面以 hash 为 key 找用户 id 。
340244120w
2020-12-21 12:51:38 +08:00
主要就防中间人攻击,而且多一层防护终究比没防护好。 像银行客户端的乱序键盘,猛一看似乎没啥卵用,其实可以避免别人通过监控,根据你指法位置判断出输入的字符
acr0ss
2020-12-21 13:18:44 +08:00
@xmumiffy 历史遗留确实是个问题,之前只考虑到网络环境是否可信。
acr0ss
2020-12-21 13:23:45 +08:00
@opengps 本机只是网络环境的一部分,往大了说是 HTTPS 证书不可信。
虽说 Referer 这个单词本身是拼写错误,但也麻烦你拼写正确下!
opengps
2020-12-21 13:26:13 +08:00
@acr0ss 感谢指正
ysc3839
2020-12-21 15:30:02 +08:00
GitHub 好像是直接传密码的。
http 本地加密传输也只能防止抓包,防不了中间人攻击。
twg
2020-12-21 16:00:42 +08:00
@acr0ss 买的证书都是可信的吧?
ZSeptember
2020-12-21 16:05:30 +08:00
https 一般不用加密
加密应该是为了反爬吧。
刚发现 GIthub 的登录竟然真的是 POST 一个 session,这个很 RESTful 。。
codehz
2020-12-21 16:11:54 +08:00
(但是其实如果说为了防止本地的问题或者中间人的话,人家完全可以直接替换掉你的脚本,或者直接在提交之前拿到你输入的东西。。。所以主要还是证明服务端没有原文存你的密码(
chinvo
2020-12-21 16:13:45 +08:00
@opengps #4 但是, 但是, 我自己抓包我自己的请求, 看到密码明文又咋了

说白了, 是为了反爬虫, 和"密码明文"没太大关系
chinvo
2020-12-21 16:14:57 +08:00
@codehz #15 实际上如果他在登陆时使用不可逆的算法, 比如摘要算法, 那才更说明他们存了明文密码, 因为通常注册的时候没有前端加密这一步.
kop1989
2020-12-21 16:20:34 +08:00
为什么加密:1 、防止中间人直接看到明文密码(增加破译成本)。2 、反爬虫
加密主流规则:没有主流规则,越非主流,越难逆向越好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX