前端 web 密码加密是否有意义

2018-12-29 11:50:59 +08:00
 a7217107
个人认为意义不大,再被劫持的情况下,明文和 md5 是没有区别的吧。大佬轻喷
16290 次点击
所在节点    程序员
93 条回复
lhx2008
2018-12-29 15:44:12 +08:00
@jiuwuerqi 当然有影响,不过影响不大,因为密码本身不长。解密时间应该小于 1ms
Xek1n
2018-12-29 15:46:55 +08:00
用 HTTPS 的加密不加密就没多大关系,用 HTTP 的也勉强有点拖时间的作用,前者会自动在传输上使用非对称加密,所以在数据传输过程中即使被人打下来也拿不到原密码,后者如果为明文,那就直接被拖走,如果为加密,那攻击者还必须知道你加密的方式,不过这点在前端基本都是透明的,只要多费点心思查一下网页 js 就清楚了。所以如果网站的用户表比较重要的话还是上 HTTPS 吧。
hanru
2018-12-29 16:06:40 +08:00
无语了,这么多人认为在前端(浏览器里)把密码加密一下是有意义的…

在正确启用 HTTPS 的前提下,这么做完全是脱裤子放屁好不好?

不理解的话,想一想如果坏人拿到了加密后的密码,直接发送给服务器是什么效果?和他拿到不加密的密码有什么区别?
ysc3839
2018-12-29 16:12:11 +08:00
对于 https 来说无意义,对于 http 来说可以防止嗅探流量,防止不了中间人攻击。
hanru
2018-12-29 16:17:11 +08:00
@iiji86 这是国内长期 HTTP 当道(包括登录页面)的历史遗留问题,毕竟国内大规模普及 HTTPS 是近两年的事——这还得感谢劫持黑产为些做出的贡献。😀
reb00ts
2018-12-29 16:27:48 +08:00
当然有意义啊,防止 request body 以各种理由被保存在 log、db 里,这样就存在泄漏风险。另外 HTTPS 只是保证了传输链路的防窃听、篡改、冒充,端上的防护还是有必要的
mytry
2018-12-29 16:51:27 +08:00
文不对题 —— 标题里说“加密”,内容里却说 md5 (哈希),两个完全不同的概念。
kkllxy
2018-12-29 16:55:52 +08:00
战马
zzzzzzZ
2018-12-29 17:03:58 +08:00
笑看楼上一群密码学和前后端加密机制都不知道的菜鸡在这里科普“用了 HTTPS 就不用加密啦”
另外前端不止是浏览器,大专毕业了再来跟大家谈笑风生好吗
wanghao2018
2018-12-29 17:45:18 +08:00
@ysc3839 大哥 你是认真的吗 ?
ysc3839
2018-12-29 17:48:15 +08:00
@wanghao2018 什么意思?
passerbytiny
2018-12-29 18:05:22 +08:00
不加背景的讨论前端 web 密码加密是否有意义,讨论本身就是毫无意义的,就好比:还不知道用不用 JPA 的时候,去讨论布尔类型的列用什么类型。

假如,有完整的 https,日志记录也能保证脱敏,那么,前端加密就是脱裤子放屁。假如因为各种原因(最终都能归类为老板太抠)不能上完整的 https,那么前端加密就是非常有必要的。假如日志记录没脱敏,那就赶紧查查还有那些漏洞没处理,前端加不加密现在不重要。
oonnnoo
2018-12-29 18:12:41 +08:00
知乎之前有讨论过。
端对端加密就是前端加密。
前端加密的意义是为了保护用户隐私。

不过这样加密后,你后端也是拿不到明文数据的。
否则前端加密就没有意义。
kongkongyzt
2018-12-29 18:24:33 +08:00
没什么意义. 不论加密算法是不是可逆的, 攻击者使用中间人重放都是一样的.

另外, 如果用的是不可逆算法, 注册的时候后端就无法检查密码的长度, 符号规则等等了.

当然, 你也可以注册的时候用可逆算法, 然后把 md5 后的数据存入数据库, 登录的时候前端传 md5.

但是如果你打算是 salt + md5 的密码数据入库的话就不行了, 你总不能下发 salt 到前端让前端在登录的时候计算 salt+md5 的值吧

简单的事情简单做, 登录的安全是要花精力, 但是不是花在这个方向上
hanru
2018-12-29 18:48:01 +08:00
@oonnnoo 端到端( end to end, e2e )加密是另一回事,和前端( front end )加密没有任何关系。前端相对于后端( back end )。前端是与后端交换数据的界面,这里讨论的 web 前端指的就是浏览器、App 这类东西。

不得不说中文的术语太不严谨了。
agagega
2018-12-29 18:49:47 +08:00
1. 在非 SSL 的情况下,服务端发过来的 JavaScript 代码完全有可能被劫持篡改。所以这种情况下去尝试自己用 JavaScript 实现一套 SSL 不是重复造轮子,而是完全不可行。那为什么浏览器可以安全地实现 SSL ?因为浏览器那部分代码是你下载的时候就内置在里面的。换句话说,如果你用了不安全的途径下载浏览器,理论上也可能被篡改。

2. GitHub 和 Twitter 把密码泄露到日志中的原因应该是某个日志相关的中间件配置不当。正常的 HTTP 日志不会去记录这些 POST、PUT 请求的请求体内容。就算前端不直接传明文密码,遇到这种情况,总不可能说就不算泄露了吧?

3. 前端那个不叫「加密」,叫散列、摘要。知乎上有个和本帖标题差不多的问题,下面一群人义愤填膺地驳斥认为前端「加密」没有意义的人(现在应该排序好多了,见 https://www.zhihu.com/question/25539382/answer/539557939 ),真是替其中某些程序员的老板捏把汗。

4. 有重放攻击这种东西。有些东西多学习下大厂和知名框架的最佳实践就行了。

5. 我觉得需要前端对密码明文处理一下的只有一类情况:就是后端不应该得到用户的明文密码。诚然只要是用了成熟一点的框架的网站肯定都知道把密码通过一些安全的散列(比如 Bcrypt )之后再存数据库,也不会再去把明文密码存到另一个地方。不过像端到端加密的应用里,你可能不希望服务端在任何情况下看到你的明文密码。

@zzzzzzZ 没毕业。所以是啥机制?
oyosc
2018-12-29 18:57:52 +08:00
可以加密比较隐私的数据,其他的没必要
expy
2018-12-29 19:28:51 +08:00
可以防止中间人拿明文去其它网站撞。
checkzhzzzzz
2018-12-29 20:27:30 +08:00
楼上前端加密形同虚设?RSA 公钥私钥?
Rubicker666
2018-12-29 20:46:43 +08:00
@lincanbin 是 Twitter 吧

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

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

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

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

© 2021 V2EX