当https不可用时保护登录


Protect login when https is not available

我正在实现一个简单的登录系统到一个web应用程序,其中没有关键或私人信息被处理或存储,我想为登录数据传输提供窃听保护。

我已经运行apache的https模块,但有时不是在选项由于端口访问限制和其他一些问题,所以,

为了不使事情过于复杂,并且在这些情况下仍然提供合理的良好保护,以下是我对快速和廉价协议的想法,我的大问题是,如果(以及为什么,如果你愿意的话)这样做是好的还是一个大禁忌:

  1. 在登录表单上,客户端接收2个随机长度(不太短也不太长)文本字符串(服务器生成并保留在$_SESSION var上仅用于一次检查)以及服务器的公共gpg密钥。

  2. User + string1和pass + string2是在发送到服务器之前使用服务器的公钥进行javascript gpg编码的。

  3. 服务器恢复传输的登录信息gpg用私钥解密并删除字符串,哈希通过检查是否有匹配存储的用户,返回登录错误/授予访问该用户的配置文件的应用程序,直到会话结束

我知道这只保护登录信息(而不是针对任何中间人攻击服务器,如果我需要这个,我会简单地强制https),它与一些基本的会话id盗窃保护技术相结合,应该防止被动窃听者使用被盗凭据访问系统,如果我是对的。

我应该实现这个还是浪费时间和资源?

当您在几毫秒后泄漏真正的身份验证令牌(会话id)时,保护登录是没有意义的。会话id必须在HTTPS的整个生命周期中受到保护,在任何情况下都不能以纯文本形式传输此值,否则您将明显违反OWASP a9。

攻击者都像这样:"很好,你为我验证了会话,我将获取cookie值并以用户身份进行验证,谢谢"