1
ETiV 2014-04-21 16:54:45 +08:00
QQ 的web登录就是这么做的
密码+验证码一起 hash 后再发出去 所有不需要手工输入验证码的地方, 验证码都是 ! 开头的. |
2
txlty 2014-04-21 16:56:45 +08:00 1
避免不了的。登录凭证总会出现在服务器内存里(不一定是明文密码)。
客户端本来就该散列一下。即使需要获取明文密码,也该可逆加密一下。QQ就是RSA可逆加密,服务端有私钥可以还原出明文密码,中间人是抓不到明文密码的。 |
3
dong3580 2014-04-21 17:00:48 +08:00
@jybox
目前我的做法: 1,服务端保存方式 X = MD5(MD5(密码)+用户名) 2,客户端 C1= MD5(MD5(验证码)+MD5(MD5(密码)+用户名))) 3,客户端会发送 C1 和 用户名 到服务器 4,服务器 验证 C1 = MD5(MD5(验证码)+X) 说的很乱,楼主将就着看哈。 唯一不安全的地方就是注册的时候! 另外可以依照这个模式拓展加密的方法,小众加密一下, |
5
jybox OP @txlty 我的出发点是『对用户而言服务器也是不应当信任的』,虽然服务器对登录凭证有完全的控制权限,但是对于『明文密码』这类隐私信息,不应当让服务器知道。
|
6
jybox OP |
7
txlty 2014-04-21 23:48:43 +08:00
|
8
brickgao 2014-04-22 00:09:02 +08:00
我觉得没有必要吧,如果有中间人攻击的话是可以篡改网页内容的。
|
9
jakwings 2014-04-22 00:35:16 +08:00
@jybox 这么说,就是只希望每次都用一次性密码,或者使用明文模糊后产生的不可逆密码,再经过 RSA 之类的加密方式传递到服务器,以求用户的「人性化密码」不被入库?
|
10
dndx 2014-04-22 01:57:40 +08:00
不可以,否则被脱裤散列起不到任何保护作用。黑客直接发散列就能登录。
|
11
crab 2014-04-22 02:02:10 +08:00
客户端提交时密码RSA公钥,服务端RSA私钥解密。可以防止监听抓包这些吧。
|
12
tioover 2014-04-22 02:09:08 +08:00 via Android
可以是可以,但是服务器要加盐二次散列
|
13
dorentus 2014-04-22 02:24:39 +08:00 via iPhone
「A false sense of security is worse than being unsure.」
|
15
chemzqm 2014-04-22 05:01:43 +08:00
安全需求不是特别高可以学学weibo密码附加用户名的一部分字符做个base64,实现简单一些,也能部分防止中间人。可能你的项目黑客都没兴趣入侵,先不用想太多吧,真需要安全的话请用https。
|
16
bitbegin 2014-04-22 07:57:03 +08:00 via Android
使用公私钥加解密的是否所有用户都使用一对
|
17
wy315700 2014-04-22 08:24:30 +08:00 1
客户端散列没必要,因为如果遭到劫持,他可以把散列后的结果给你重放一遍
|
18
wwek 2014-04-22 09:00:25 +08:00
即便是 中间人攻击抓到了 散列后的密文 可以登录。
我们也需要散列加密。 怎么都比明文好· |
19
cdffh 2014-04-22 09:53:50 +08:00
如果 从纯粹技术的的角度考虑 不想用https的话,还是散列一下比较靠谱。
|
20
yyfearth 2014-04-22 12:06:12 +08:00
|
21
est 2014-04-22 12:13:34 +08:00
用不着散列。再原密码后面随机加上一定字符再POST即可。服务器验证密码先去掉随机添加的字符,再验证。每次添加的字符和长度都随机。中间人拿到也是白拿。除非多次捕获。
|
23
est 2014-04-22 12:40:35 +08:00
@nigelvon 好像也是。那么只能客户端散列了。不过客户端散列也没法避免重放攻击。所以还是得想个变化的方案。
我是记得很多嗅探密码工具只会修改form POST里面password passwd pwd关键字的。稍微变化一下可以避免这种无脑嗅探。 如果被单个盯上了。那么基本是跑不掉了。 T_T |
24
printf37 2014-04-22 12:49:06 +08:00
选择一种非对称加密算法F
注册的过程使用SSL 用户注册时: 在本地浏览器中,仅以用户名和密码为种子(不得引入其它熵来源)生成n个随机数 用这些随机数生成F的一对密钥 把公钥发送至服务器 用户登陆时: 首先提交用户名 服务器使用该用户的公钥和算法F加密一串随机数和当前时间发送至客户端 客户端重复注册时的密钥生成逻辑,在本地生成私钥 用私钥解密得到随机数,验证服务器端时间 将随机数附上当前时间和验证码答案再用私钥加密发送至服务器 服务器用公钥解密,检查随机数、客户端时间、验证码答案 放行 随便YY的,不知道行不行 |
25
dndx 2014-04-22 12:56:48 +08:00 1
@printf37 既然都用 SSL 了,不如全程 SSL 。关你什么算法,没有 SSL 保护直接向页面注射一段 JS 发送击键事件就跪了。
|
26
ipconfiger 2014-04-22 13:31:10 +08:00
https不買證書一樣會被中間人攻擊的
|