盼大佬解答,前端加密到底是不是脱裤子放屁?

330 天前
 userKamtao

闲暇之余,探索了一个小伙伴的开源网站,无意中发现了他的修改密码接口,是明文传输的,如下图。

后来我跟他反应了这个问题,我的观点是应该在前端 md5 加密一下,他说,他在后端做了加密处理,明文传输没问题,网站是 https ,前端加密不就等于脱裤子放屁吗?

和他几番讨论之后,无果,也有几个小伙伴觉得前端加密等于自己骗自己。

我经验比较单薄,以至于没有什么实际上的论点去论证,希望有大佬解答一下,这种场景在前端加密有没有意义。

33610 次点击
所在节点    程序员
336 条回复
zsxeee
330 天前
1. 鉴权:密码本身是不安全的,因为用户的各种不安全的做法。所以现在都建议使用两步验证,短信登录等 OTP 。甚至现在直接使用 passkey 替换密码。
2. 泄露:所有的安全建议都说过不要重复使用密码。如果没用,加密无所谓。如果用了,一个应用加密没有任何用。

敲一半才发现只有一点,其实应用加不加密是无所谓的,完全取决于用户习惯。
1iuh
330 天前
@userKamtao 你又没办法限制独立开发者一定要在前端做哈希,独立开发者想要拿你密码当然可以拿。我们讨论的话题是在 https 的前提下, 前端不做加密是否安全。 后端会偷密码或者日志输出密码这种都是属于系统内部的问题,就算要求前端做哈希,那前端还能在哈希之前把密码存下来,这种问题讨论没有意义。
userKamtao
330 天前
@1iuh 你说的好像也有道理,如果是小人,前端页面也可以拿到密码。
busier
330 天前
看你怎么加密

如果你在前端实现了对称加密,那么就无意义。

如果你在前端代码里面 实现了 RSA 加密 那么加密还是有意义的
somebody1
330 天前
要哈希的,md5 是摘要算法,不是加密,加密是可逆的,可以解密,摘要是不可逆的,单向的。

为什么要哈希密码之后再传输,主要是 防止明文泄露,即使最差的情况,被拖库了,也只能获取到哈希的密码,而不能得到明文,因为明文密码可以用于撞库,而哈希不可以,因为不同的网站往往对密码的处理不同,比如,有些网站会加盐后哈希,这样即使大家用的同一种哈希算法,因为盐的存在也只会影响该用户在本网站的安全,而不会影响到用户其他的网站(很多用户多个网站的密码往往是一样的。)。
woodfizky
330 天前
前端那不叫加密,那叫摘要(毕竟你不能把加密代码和密钥放在前端),这种情况后端存的应该也是摘要。

只能说不是没有用,有一点用。
比如有中间人攻击啥的,用户无视证书有问题之类的,这种就算是 https 请求,也会被看到请求内容;但是这种情况,会的人也会看你前端的摘要算法,然后找相应库去撞。
或者明文密码进入后端的时候,后端设计上只要想,就能看到明文密码,那这样对用户来说是不公平的。
isbase
330 天前
用非对称加密算法,前端用公钥加密是有意义的
yyf1234
330 天前
为什么 v 站一提到前端加密就扯 https?
这两者有半毛钱关系吗?
poorcai
330 天前
18 年的时候,我就问过这个问题: https://tanronggui.xyz/t/466847
lisongeee
330 天前
你为什么不直接参考大型网站的做法呢?比如 Github

![image]( https://github.com/gkd-kit/gkd/assets/38517192/55fe92b8-1437-4050-bf90-18e73d6c458f)
somebody1
330 天前
@somebody1
补充,前面没答到电子上。

网络安全是有木桶效应的,也就是最薄弱环节。如果前端不加密,则中间人攻击或者从流量中可能可以逆向出明文密码。这拖累了网站整体的安全。

只要有任一环节可以获取到明文(在网络中,存储中),就极有可能发生泄露。
busier
330 天前
至于前端 hash ,毫不客气的说就是脱了裤子放屁。
userKamtao
330 天前
@lisongeee 好家伙 这个可以
codespots
330 天前
@userKamtao #7 多平台同密码泄露影响到你是因为泄露你密码的平台直接存的明文,而不是因为传输过程是明文,这两者区别大了去了
rrfeng
330 天前
要传输的数据是不是密码,完全是两个不同的问题。

「密码」就是要原地消灭,只传 hash 后的值,尽可能的减少暴露密码的可能。
shakoon
330 天前
举个例子给你说吧,某项目的登录验证是这样的:

1. 密码控件自身生成一个随机数 C ,并从 webserver 获取一个随机数 D 。
2. 密码控件将 C 、D 组成一个新的对称密钥 CD 。
3. 密码控件用密钥 CD 对输入的 X 进行对称加密,获得加密结果 Y 。
4. 密码控件使用非对称公钥 G 对 C 进行加密,产生加密结果 E 。
5. 将 Y 和 E 传送给 webserver 。
6. webserver 解密 E 得到 C,从而得到 CD
7. 通过 CD 解密 Y 得到 X
8. 调用 XX 算法计算 hash ,得到 A
9. A 与数据库存储的 B 比对,一致则验证通过。

无论是传输过程中的 Y 、E 泄漏,还是服务器上存的 F 泄漏,都无法推演得到用户真正输入的 X 。所以你说有用没呢
johnhuangemc2
330 天前
比较建议传递密码明文至后端, 后端自行 HASH 后存储.
启用了 HTTPS, 如果没有合规要求, 可直接传明文, HTTPS 就是保证传输安全的; 如果有合规性要求, 则按要求对密码进行前端加密处理. 前端加密虽然可破解, 但可以挡住大部分攻击者.
meshell
329 天前
@userKamtao 在以前 https 不那么流行,运营商劫持 http 的时候,好多站点都是前端 rsa 加密的。淘宝,金山这些都是。后面 https 普及了,基本都是明文了。泄漏密码和前端加不加密关系不大。
me1onsoda
329 天前
我前端再混淆一下,加密就能刷掉一大把二把刀的人,意义还是有的
lesismal
329 天前
我在网吧忘了下机, 被后面坐我那的程序员盗了密码
我工位忘了锁屏, 被坐在旁边的同事拿到了密码
我使用了代理软件, 我电脑到代理之间不是 tls
......

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

https://tanronggui.xyz/t/1025454

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

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

© 2021 V2EX