2011-11-18 66 views
5

从我在网站上看到的很多帖子,由AJAX或传统形式执行的登录是一样安全的。 (RE:Login/session cookies, Ajax and securityAjax login and javascript cookies, is this secure?JavaScript哈希在AJAX登录调用,更安全?

我的问题(S)是/是:

  1. 如果我哈希(通过客户端/ JavaScript的哈希 库)用户的密码之前,我把它发送到服务器,我是否增加了人员安全度?

  2. 如果我放置一个表单令牌(一个随机基础,另一个基于时间),那么是否涵盖CSRF攻击?

  3. 毕竟我有我所有的基地吗?这个表格是否安全?
+1

如果您需要发送密码(并且如果可能的话,还有其他所有情况,也有登录会话cookie),请使用SSL。 – Thilo

回答

5

其实这可能是一个主要的安全问题。密码被散列的原因是计划失败的一种手段。攻击者可能访问数据存储(sql注入),然后获得散列。如果您只是使用哈希登录,那么攻击者不必破解已恢复的哈希以访问应用程序。

重播攻击也是一个问题。如果我在认证期间嗅探哈希,什么阻止我重播该请求进行身份验证?

使用消息摘要功能进行身份验证的协议为客户端提供了一个随机数,用作一次性salt。微软的SMB NTLM身份验证就是一个很好的例子,但它有a lot of problems

USE SSL,而不仅仅是登录。 OWASP A9指出会话ID绝不能通过不安全的通道泄露。毕竟谁在乎密码,如果你只是在几毫秒后泄漏真正的认证证书。

大多数人不会为登录实施CSRF保护。毕竟攻击者首先必须知道密码,所以“会议骑行”是一个有争议的问题。

+0

出于好奇,如果您在提交之前对密码使用公钥加密,然后使用匹配的私钥解密服务器上的密码,那会更好吗? – Esailija

+0

@Esailija不对称加密有其自身的问题,如重播攻击,缺乏IV。但更重要的是,如果你不保护会话ID,那么你没有保护任何东西。任何攻击者嗅探导线都将具有完全访问权限。 – rook

+0

啊,是的,应该更多的思想阅读你的答案。我完全错过了第三段的最后部分......非常感谢您的回答。 – Esailija

0

如果攻击者知道你在使用什么哈希,那么他们可以破解它。如果你想添加一个盐,你必须把它发送到浏览器,攻击者可以拦截它。将时间用作盐也是行不通的,因为只有相对较短的时间,所以他们也可以解决这个问题。

+0

“哈希”(与加密相反)通常是不可逆的。 –

+0

@DavidGelhar谢谢,我改变了措辞,这是我的一个糟糕的选择。 – qw3n

+1

@大卫Gelhar他意味着一个微不足道的攻击。开膛手约翰或者雨虹应该这样做。 – rook

1

稍微放一边,但在回答问题3。另外请记住,AJAX和标准格式也就像不安全一样。

实施安全认证非常困难。除非你是做学术练习,否则我会强烈建议使用你的框架提供的库,如果你有足够的幸运有一个好的。

您还需要考虑诸如以下等事情。

  • 实现适当的随机和不可猜测的会话ID以用于会话cookie。
  • 不允许会话ID被强制。
  • 当权限或凭证发生变化时(例如,因为用户已登录或退出), 立即使会话无效并开始新的会话。
  • 提供注销功能,并确保在注销时使会话无效。
  • 将Cookie设置为HttpOnly - 最好需要HTTPS,并将cookie设置为仅安全。
  • 考虑限制会话有效性,以包括检查有助于与用户匹配的一些其他信息,例如,用户代理。
  • 在未使用之后总是会话过期,并且不要通过将用户重新连接到其旧会话来实现“保持登录状态”。
  • 确保2个会话不能同时具有相同的会话ID
  • 确保当会话失效时会破坏所有会话数据。一位新来的用户可能刚好被分配了以前使用过的会话ID。此新会话不得访问之前根据会话标识设置的会话数据。
+0

这太棒了!是否在PHP的session_start()函数中内置了“确保2个会话不能同时具有相同的会话ID”? –

+1

@JosephSzymborski是的。你可能会发现这个有趣的重新php http://phpsec.org/projects/guide/4.html – Cheekysoft