【发布时间】:2012-01-25 19:29:23
【问题描述】:
我有一个正在尝试启动的 Web 应用程序 (Java)。用户需要登录系统才能使用这些功能。所以这个应用程序有两个部分:
1) 用户注册
2) 登录
我担心的是我将用户名/密码数据从网络浏览器传输到服务器的方法有多安全。
注册
我很迷茫,因为我不确定如何安全地将数据从网络浏览器发送到服务器。
登录
我有以下设置:
客户 >> ---------------------------------- -------------------服务器 >>
[请求令牌] -------------------------------------------------- ------------------------>>
------ --------[从会话 ID 发送一个随机生成的令牌]
[客户端计算 hashedSecret = SHA1(token + SHA1(password))]
[发送数组:[username, hashedSecret]]------------------ -->>
[服务器从数据库中查询用户名的 SHA1(密码)]
[服务器计算 expectedSecret = SHA1(token + SHA1(password))]
[服务器将 hashedSecret 与 expectedSecret 进行比较]
我想知道的是如何安全地注册用户以及我的登录是否足够安全。
谢谢
【问题讨论】:
-
您预期的威胁是什么?如果您只担心数据在网络上的数据包嗅探,那么使用 SSL 并忽略您的任何花哨的东西 - 只需像处理任何 Web 请求一样发送用户/通行证,SSL 就会避开嗅探器。跨度>
-
HTTPS == HTTP + SSL 您的应用将从端口 80 更改为 443(如果默认配置),并且会使用更多的 CPU 时间。但也可以实现自己的握手逻辑。是的,理论上,如果您在令牌生成中添加随机盐,那么您的操作是正确的。
-
我启动应用程序的网站还没有 SSL 证书。但是,他们正计划获得一个。所以在他们得到一个之前,我必须使用某种加密/散列技术将数据传输到服务器。我可以想出登录程序,但不知道如何保护注册过程。我担心的威胁是重放/中间人攻击和嗅探器。
-
如果没有受信任的证书,您将无法防止中间人攻击。时期。推荐阅读:stackoverflow.com/questions/6658557/… 如需解决方法,请查看 aSSL:assl.sullof.com/assl/securityfaq.asp
-
这些链接很有帮助,谢谢
标签: javascript security authentication encryption passwords