1
geelaw 2017-05-06 13:55:28 +08:00 1
不能,看到之后可以直接重放。
一个简单的改进方法是每次登录前从服务器拿一个 GUID 作为 token,然后传回这个 GUID + hash(密码 + GUID),服务器看到之后无论通过与否,都不再允许使用那个 GUID。为了保证安全,hash 要难一些,且服务器不能校准时间(否则会有时间倒流的问题),且必须使用能生成惟一 GUID 的生成算法。 这样中间人并不能窃取密码,但仍然可以做很多其他的事情。 不过你能这样验证,说明密码是可逆存储在数据库里面,这也是比较危险的。 |
2
xialdj 2017-05-06 13:58:58 +08:00 via iPhone
我觉得挺好的 改进的地方 可以用楼上说的一次性 token 比时间好一些
|
3
fengyuhan 2017-05-06 14:00:40 +08:00
至少 sha-512
學校有一臺機器人稱 beast,五個 1080 顯卡。用 hashcat 不到一分鐘可以撞完 md5 |
4
v1024 2017-05-06 14:09:52 +08:00 via iPhone
没有绝对的安全,条件有限的情况下,能做一些是一些,我觉得挺好的
|
5
fangxing204 2017-05-06 14:20:35 +08:00 via Android
好像网易企业邮箱就是类似做法?,输入密码后点击登录发现密码变长了,。而且这种方式最烦的就是用 lastpass 填密码,总是提示密码错误,但是手动复制进去又可以登录。
|
6
Quaintjade 2017-05-06 14:24:26 +08:00
hash 算法不行,因为不可逆,所以下次用户必然得发给你相同的 hash 值。这样的话就能重放攻击了。
如 1 楼所说,你要用的是可逆的加密算法。 |
7
billlee 2017-05-06 14:24:48 +08:00
这说明你在后台保存了明文密码。。
应该是 hash(hash(用户输入的密码)+用户名+日期戳年+月+日+小时) 才对 这不能防窃听重放,要防窃听要上 CHAP. 然而还是不能防 MITM. |
8
fengyuhan 2017-05-06 14:45:44 +08:00
其實你怎麼做都差不多,你不洩漏別公司會洩漏。大多數用戶會同一個密碼的。
|
9
wy315700 2017-05-06 14:48:58 +08:00
典型的 chap 协议,缺点就是,密码需要明文存储
|
10
dong3580 2017-05-06 15:21:22 +08:00
不能。
1.全球化会很坑爹; 2.改进一下,加上登录验证码的 hash,然后一起 hash,不要加时间。 |
11
gamexg 2017-05-06 15:31:07 +08:00
不建议。
最好的方案是上 https。 如果实在不能上 https,那么次选是直接用服务器公钥加密用户明文密码及一个随机数,记得后台会话里面保存并验证这个随机数,仅限使用一次。这样可以允许后台不保存用户明文密码,也可以防止窃听及重放攻击,但是无法防止中间人攻击。 公钥加密和 hash 用户名密码都是可以防止窃听及重放攻击,但是考虑下服务器被入侵后的后果: 非明文储存,无法获得用户密码,挂马也只能获得挂马时登陆用户的明文密码。 明文储存,直接获得所有的用户明文密码。 |
12
yoa1q7y 2017-05-06 16:10:16 +08:00
楼上说的不就是 csrf 验证嘛
|
13
lsylsy2 2017-05-06 16:51:31 +08:00
不懂前端,但是想问一个问题:
没有 HTTPS,那么怎么处理劫持?中间人直接修改了网页 JS,让用户 post 明文密码,中间人保存以后再按照你的加密传过去。 |
15
geelaw 2017-05-06 16:53:51 +08:00
@Quaintjade 你没看懂我 1 楼写的是什么
|
16
Quaintjade 2017-05-06 17:34:48 +08:00
@geelaw
你说的是像 CHAP 那样双方都知道明文密码?那样的话 LZ 方法确实是 1 小时内都可以重放,改用唯一的 GUID 能避免这点。 |
17
lslqtz 2017-05-06 17:47:42 +08:00
不能起到安全作用,前端页面没加密均可通过修改 JS 得到内容。
但不太可能重放攻击。 |
18
lslqtz 2017-05-06 17:49:12 +08:00
|
19
geelaw 2017-05-06 17:52:42 +08:00
|
20
billlee 2017-05-06 19:53:58 +08:00
@lsylsy2 #13 网页不用 TLS 没可能防 MITM 的。防 MITM 需要双方有预先共享的信息,在 TLS 里面就是 CA. 如果是 app 什么的还有办法处理
|
21
lslqtz 2017-05-06 20:27:31 +08:00
@geelaw 重放攻击是指攻击者发送一个目的主机已接收过的包,md5 中加了时间并没有明文密码,重放攻击将在时间过后直接无效。
|
22
lslqtz 2017-05-06 20:28:43 +08:00
例如说:我这有个 123456 的密码,md5(123456+2017+05+06+20+28),1 小时过期。
那么只有 1 小时内能进行重放攻击,所以我说基本就没可能了。 而密码已经经过 md5,不会进行明文传输。 |
23
cankoor 2017-05-06 20:32:38 +08:00 via iPhone
你可以看 https 的原理,可以实现一个。基于非对称加密。
|
25
wuhx 2017-05-07 17:39:57 +08:00
|