在没有 https 的情况下,如何确保用户登录安全

2019-08-27 11:16:42 +08:00
 NoKey
考虑了一下这个问题
目前把这个问题分成两步
第一,注册
第二,登陆

注册这部分,我这里无解,我想不到有效的办法。。。

登陆这个,有一个办法
将用户的密码做 md5,然后加上当前的时间戳,再做一次 md5
伪代码表达:
md5(md5(passwd)+timestamp)
返回给服务器的时候,将这个结果和 timestamp 一起返回

服务器除了常规的字段验证之外,需要验证时间戳,每个时间戳,只能使用一次
这样应该可以避免使用抓包数据登陆

各位大佬,有没有更好的办法呢?一起讨论一下吧~~~
14790 次点击
所在节点    程序员
148 条回复
mamahaha
2019-08-27 13:01:24 +08:00
@danmu17 术业有专攻吧,前端大神也许是数据库小白,java 大神也许是区块链小白。大多数人都是抱着取长补短的态度来的吧。
hanqi7012
2019-08-27 13:06:49 +08:00
这么容易确保安全还要 CA 干嘛
xenme
2019-08-27 13:09:02 +08:00
没有 https,其他都没用。
md5 只是把用户的密码从 abc 变成了 md5 ( abc ),对中间人没有区别
cz5424
2019-08-27 13:22:23 +08:00
发明一个 https
shuax
2019-08-27 13:23:52 +08:00
rsa
arrow8899
2019-08-27 13:25:07 +08:00
https 就是干这个的啊,不明白为什么不用 https
mornlight
2019-08-27 13:25:49 +08:00
不可能。你做的任何设计,我把你网页内容换掉就行了,先把密码往其他地方发一次。
xuanbg
2019-08-27 13:35:33 +08:00
增加一个获取 code 的接口,服务端生成一个一次性的随机字符串,和用户名、密码一起计算出一个签名,算法可以简单地使用:md5(md5(passwd+account)+code),因为服务端的密码已经是 MD5 值了,所以不需要再次 md5。签名结果作为 key 保存在 redis 中(value 可以是用户 ID),然后把这个 code 返回前端。前端使用 md5(md5(md5(passwd)+ account)+code)算法就能计算出相同的签名。只需要把这个签名作为登录的唯一参数传给后端进行验证即可。后端拿这个参数去 redis 中找这个 key,找到就是验证成功。如果用户名、密码、code 任何一个参数对不上,都无法计算出正确的签名,也就不能通过验证。

中间人只能拿到用户名和 code,永远拿不到任何形式的密码。所以即使数据不加密,也是安全的。只要签名是一次性的,中间人拿到签名也没用。既不能用来登录,也无法还原出密码。
falcon05
2019-08-27 13:43:39 +08:00
注册的时候服务器生成密码,让用户记住
xuanbg
2019-08-27 13:47:56 +08:00
登录的安全主要就是中间人攻击,而中间人攻击的实现方法无非就是重放攻击。也就是把截获的数据重发一遍或者重新组装后发送,所以防范的办法就是让重放失效。
根据以上分析,唯一的办法就是引入一次性密钥,并且不直接传递任何形式的密码。只要做到这两点,中间人就无处下手进行攻击了。
wackyjazz1
2019-08-27 13:49:35 +08:00
建立 httpsr
ysc3839
2019-08-27 13:50:31 +08:00
前端 RSA 加密密码再发给服务器,不过只能防止抓包,防不了中间人攻击。
Hanada
2019-08-27 13:52:27 +08:00
@falcon05 但是注册时已经被中间人截取下发的密码就无解了,说白了,不用 https,中间人有一万种办法去搞你
lsylsy2
2019-08-27 13:56:04 +08:00
不用 https 的情况下,你的网页可以被中间人随意篡改
你不管写多复杂的加密,中间人帮你换成明文,完事。
包括 @lshero @xuanbg 的都没用,举个例子,没有 https 的情况下,你登陆苹果我可以把你跳转到钓鱼网站,苹果的安全够不够高?盗号的是不是还是很多?
loginbygoogle
2019-08-27 13:58:38 +08:00
手机验证码登录,多简单的事儿
xuanbg
2019-08-27 13:59:38 +08:00
@lsylsy2 https 也可以山寨,这种情况就不要讨论了吧,没有任何意义。我的方法你如何换成明文?我根本不传密码
xuanbg
2019-08-27 14:06:11 +08:00
楼上说 https 能搞定一切的,真的研究过安全么? https 并不能防重放攻击,而登录最大的安全威胁就是重放攻击。我抓到一个登录的 https 包,原样不动发给你,token 什么的轻松到手。
Jex
2019-08-27 14:06:54 +08:00
很简单,把毫无安全常识的码农都炒掉就行了
herozhang
2019-08-27 14:07:28 +08:00
每次登录都用短信验证码
TomVista
2019-08-27 14:10:21 +08:00
手机验证码+长连接+自定义通讯协议,代码混淆一下,只有上帝才知道你发送了什么。

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

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

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

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

© 2021 V2EX