2011-05-24 33 views
1

我知道任何尝试实现用户身份验证的人的标准答案都是使用已经建好并经过测试的库,但我一直很喜欢重新发明轮子。如何在注册期间传输密码(PHP&SQL)

我已经在PHP中创建了一个用户认证和会话数据系统,使用challenge-response技术进行登录。所有专用页面在开始时都需要一个功能来验证会话超时,IP,浏览器和256位令牌密钥的会话检查。验证会话后,它会重置超时并生成新的令牌密钥。

我现在看到的最大弱点是用户注册。我还没写过,但看起来我不得不从客户端向服务器发送明文密码或散列版本。无论哪种方式,如果数据包被捕获,窥探只需登录即可。

有没有简单的方法来加密客户端和解密服务器端?或者也许可以用延迟和虚拟数据包的方式发送它。

此外,如果有任何其他问题,我可能错过了,请让我知道。

  • 登录要求挑战salt,并且客户端在发送密码之前散列密码
    散列(散列(密码)。salt)。
  • 要坚持一个会话,客户端必须拥有最新的令牌密钥和相同的浏览器IP到创建会话的那些IP。
  • 当然,所有用户输入& ajax响应在查询之前被检查。

回答

1

确实有一个正确答案: 使用HTTPS。 SSL over HTTP是唯一能够完全保证安全的解决方案。

你不能在这里做任何javascript检查,因为盐会被暴露。这不是正确的方法。

+0

SSL是一种痛苦,因为其目的是将其实施到CMS中;所以代码将在客户端的服务器上,所以他们不会有静态IP和证书。我想我可以通过我的服务器路由注册。 – Oliver 2011-05-24 21:20:07

+0

@Oliver然后他们的网站永远都不会那么安全,因为没有HTTPS,每次人们登录他们的凭证时都会通过未加密的线路发送,并且他们会在每次请求时以未加密的方式发送其经过验证的会话ID到服务器。那么,为什么要做一个关于注册的大事? – 2011-05-24 21:22:41

+0

javascript所使用的任何加密密钥都可以通过查看我猜测的来源来暴露。 – Oliver 2011-05-24 21:23:11

1

有没有简单的方法来加密客户端和解密服务器端?

如何使用HTTPS?