我想实现一种登录机制,用于验证我的Web应用程序的管理员。但由于我没有使用ssl,我不能依赖用户通过html表单发送密码。
所以我想过使用一次性密码(我实际上并不知道这件事,我最终重新发明了这个概念,最终发现这样的事情已经存在)
我想要的只是你对我的实施安全性的看法:
1)客户端请求随机且唯一的哈希。服务器生成该哈希值,将其存储在会话变量中并将哈希值返回给客户端。
2)客户端从该哈希值使用自己和服务器所知的自定义算法来获取密码。该密码将被发送回服务器。
3)服务器执行相同操作并检查密码是否匹配,如果用户已通过身份验证。
这可以解决吗?
答案 0 :(得分:5)
“只有他和服务器才知道的自定义算法”。这是设计破坏,因为你完全依赖于秘密算法。
一旦分发实现(例如作为客户端JavaScript),它就不再是秘密了,更不用说协议中的任何内在弱点了。
我的2:除非你是加密专家,否则永远不要推出自己的解决方案。坚持公共,健全和经过验证的协议,只使用信誉良好的实施。