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

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

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

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

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

各位大佬,有没有更好的办法呢?一起讨论一下吧~~~
15140 次点击
所在节点    程序员
148 条回复
fffang
2019-08-27 11:27:59 +08:00
加密算法+签名校验
chendy
2019-08-27 11:32:55 +08:00
要么 https,要么不安全,前端做哈希做加密只能提高门槛不能保证安全
misaka19000
2019-08-27 11:33:37 +08:00
没有用,中间人拿不到密码,但是可以依然可以通过传输的数据伪造用户登录
murmur
2019-08-27 11:34:03 +08:00
rsa 不久可以了么
AngryPanda
2019-08-27 11:39:24 +08:00
下发一个 nonce,密码提交之前用它来进行非对称加密,提交密文密码给服务端。
abcbuzhiming
2019-08-27 11:40:52 +08:00
@AngryPanda 中间人攻击可以换掉你这个 nonce
SuperMild
2019-08-27 11:41:39 +08:00
简而言之,搞来搞去最终相当于重新发明 https。
tabris17
2019-08-27 11:42:04 +08:00
没有第三方根证书无法防止中间人攻击,无解
AngryPanda
2019-08-27 11:42:09 +08:00
@abcbuzhiming 是,中间人还可以截获 cookie
vcfghtyjc
2019-08-27 11:44:01 +08:00
Oauth 吧
timestamp 这个方案实际上不太可行,因为 server 和 client 之间不一定同步。
sobigfish
2019-08-27 11:45:40 +08:00
这问题就相当于没有种果树,如何吃到果子,答案就只有 2 个,自己种, 或者买(用第三方登录)
shiji
2019-08-27 11:46:32 +08:00
不能防中间人
时间戳只能用一次限制了服务性能
不可以明文储存用户密码
不可以用 md5 保存用户密码
你用什么保持登录状态? cookie 什么的直接抓包一清二楚,根本不需要研究你是怎么处理登陆的, 直接把 cookie 全部拷贝就有了同样的身份

ssl tls 的存在就是用来解决问题的,
严格来说你离开了它们就无法保证安全

钻牛角尖的话让用户必须使用你提供的 openvpn 登录网站,
必须使用 sshtunnel 登录网站,可以不用 HTTPS, 但是现在起作用的还是 ssl
shingoxray
2019-08-27 11:49:27 +08:00
注册和登录可以通过手机短信动态一次性密码,但是登录成功后就无法抵御中间人了。
luob
2019-08-27 11:53:15 +08:00
当密文和密码本都从一条路走的时候,什么加密手段都是假的。
没有 https 的情况下,短信或邮箱快捷登录也许是个好方法。
lshero
2019-08-27 11:55:31 +08:00
使用第三方可信通道完成密码传递的过程,比如短信通道下发验证码。
验证通过后将验证码当成一个凭据存储在本地参与签名,切记不可在传递的过程中把短信验证码加入请求体,只传递参数和签名,服务端校验签名是否合法。
用户的 IP 地址和 session 或者 cookie 需要进行绑定,网络环境发生变化后需要重新登陆
msg7086
2019-08-27 11:59:11 +08:00
你说的安全,只是保证用户密码不被第三方截取的意思么。
那走第三方信道就行了,比如让用户通过短信把密码发到你短信终端,或者让用户给你发一份邮件,里面填写密码。
danmu17
2019-08-27 12:02:45 +08:00
又是一个典型的不知道自己在问什么的提问者。
https 的 best practice 是实现在客户端和服务端以及 CA 三方都没有被 compromise 的前提下来阻止通讯被 MIM。
所以在楼主没有误入歧途的前提下
楼主无论如何都不可能在不建立属于自己的国际标准并开发对应的服务端&客户端的前提下
实现真实的需求。

我越来越好奇是不是整个 V2EX 只有我一个不是小白同时又闲又好心的存在了。
danmu17
2019-08-27 12:11:02 +08:00
另外我也好奇是不是真的没有几个中国程序员看过 ietf。
rockyou12
2019-08-27 12:13:53 +08:00
基本不可能,不用 https 首先你前端所有代码都是明文,怎么加密都没用
abmin521
2019-08-27 12:51:27 +08:00
自己实现 https ? 我瞎说的

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

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

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

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

© 2021 V2EX