我目前正致力于基于AJAX的网站的身份验证,并且想知道是否有人对这类事情的最佳做法有任何建议。
我最初的方法是基于cookie的系统。基本上我用一个auth代码设置一个cookie,每个数据访问都改变了cookie。同样,每当验证失败时,该用户的所有会话都被取消验证,以阻止劫持者。要劫持一个会话,有人必须让自己登录,并且黑客需要将最后一次cookie更新发送到欺骗会话。
抱歉,系统由于AJAX的性质,迅速进行多次请求时,他们可能会回来失灵,设置cookie错误,并打破了会议,所以我需要重新实现。
我的想法是:
问题不在于转移的数据,唯一的问题是有人可能会控制不属于他们的帐户。
一种明显不太安全的基于会话的方法
答案 0 :(得分:1)
就我个人而言,我没有发现整个网站(或大部分网站)使用SSL都是过度杀伤。也许不久前速度和进给速度较慢。现在我会毫不犹豫地将网站的任何部分置于SSL下。
如果您已确定可以接受使用SSL作为整个站点,则可以考虑使用旧的“基本身份验证”,其中服务器返回 401 响应,导致浏览器提示输入用户名/密码。如果您的应用程序可以使用此类登录,则适用于AJAX以及对您站点的所有其他访问,因为浏览器会处理使用适当凭据重新提交请求(如果您使用SSL,则安全,但仅< / b>如果你使用SSL - 不要使用普通的http使用Basic auth!)。
答案 1 :(得分:1)
SSL是必须的,阻止了几个用户可以使用的透明代理连接。然后我只需检查传入的IP地址和经过身份验证的地址。
重新验证:
答案 2 :(得分:1)
一个常见的解决方案是对用户的会话ID进行哈希处理并将其传递给每个请求,以确保请求来自有效用户(请参阅this slideshow)。从CSRF的角度来看,这是相当安全的,但如果有人在嗅探数据,那么它就会被截获。根据您的需要,ssl始终是最安全的方法。
答案 3 :(得分:0)
如果您对服务器的每个响应都设置了“生成”时间戳,并且AJAX应用程序始终可以使用带有最新时间戳的cookie,那该怎么办。
答案 4 :(得分:0)
您最好的选择是在先前经过身份验证的Apache和/或Tomcat连接上使用SSL连接。基于表单的身份验证在任何一个中都具有所需的SSL连接,可以为您提供安全连接。然后,webapp可以为会话提供安全性和身份,而客户端Ajax则不需要关心安全性。
答案 5 :(得分:0)
您可以尝试阅读Billy Hoffman和Bryan Sullivan撰写的Ajax Security一书。我发现它改变了我对安全性的思考方式。对于Ajax的每个阶段都有非常具体的建议。