2012-07-18 28 views
2

这不是一个关于某些javascript详细信息的具体问题,但我正在寻找验证,以确定我创建的模型中没有明显的漏洞。我决定推出自己的认证程序(除了使用bcrypt在后端散列),其工作是这样的:使用ajax的JavaScript应用程序的身份验证模型

  1. 用户(浏览器或PhoneGap的创建本机应用程序)报> JSON对象使用jQuery的AJAX发布后端使用bcrypt处理密码并保存密码用户配置文件数据
  2. 后端根据客户端IP地址生成并保存它返回的令牌(随机哈希,如/ dev/urandom)
  3. jQuery插件存储令牌到当地的cookie
  4. 当发出一些请求(发布,评论,但不是太频繁)时,它会从cookie并将其添加到json中,并使用ajax将其再次发布
  5. 后端检查该令牌是否存在并且尚未过期(有效期为7天),检查该IP地址是否相同,并且如果ok验证请求json数据并处理该请求
  6. 当令牌已过期的登录画面中示出和凭证张贴AJAX并且如在步骤中创建一个新的令牌2.

一切顺利通过SSL进行AJAX请求和无密码存储任何地方。如果超出阈值,还会有一种机制检查蛮力标记垃圾邮件是否会暂时阻止源IP。这不是一个高安全性的应用程序,但要尊重用户数据并确保其“足够”安全。

我希望这个问题具有资格,即使它不是特定的,并且作为其他人的参考,如果它会引发一些讨论。我无法找到有关此特定方法的任何最佳练习教程。

更新:认证机制根据收到的反馈进行更新,因为它似乎对于非关键Web应用程序来说是'足够安全'的。

+0

生成一个随机令牌,比如'/ dev/urandom'不使用md5,它被破坏并且不是一次性使用令牌的最佳工具。 – rook 2012-07-18 19:57:44

+0

感谢您的提示,我会研究一种生成令牌的替代方法。你能告诉我如何创建一个随机的阿尔法 - 数字字符串,因为我没有使用它来散列密码等?熵是否比替代品或其他东西更糟? – 2012-07-19 16:58:37

回答

2

考虑到你说你的应用程序不是一个高安全性的应用程序,而且你想要基本的安全控制,我试图覆盖从高层次角度来考虑的所有事情。

身份验证流程及其使用的机制对我来说似乎很好。我在这里看到的唯一关注点是会议管理本身。使用MD5生成会话令牌是很好的(取决于您是否使用了正确的伪随机函数,它们以正确的方式播种),尽管如果有人尝试为您的令牌创建冲突,SHA1/SHA256可能会是更好的选择。

我在这里看到一些遗漏的东西 - 它们可能被省略,或者它们可能不在那里,所以我会提及它们。第一件事 - 你没有提到你是否确保用户和你收到的cookie之间存在匹配。您需要确保这两个匹配,以便一个用户不能窃取第二个用户的会话。

我在这里看到的第二件事是验证cookie是不是从用户那里偷来的。例如,如果我设法从用户​​那里窃取会话cookie,然后从另一个地方在我自己的计算机上重播它,我仍然可以使用当前的会话处理机制进行登录。

您需要一种方法来唯一标识请求来自哪台计算机 - 一种方法(以及一种名为CodeIgniter的PHP框架执行此操作的方式)是通过验证IP地址以及用户代理该请求来自。后者很容易被欺骗,但前者更难。这使得您的会话对攻击更具弹性 - 除非应用程序在公共机器的网吧中使用,并且用户尚未注销。

这使我想到了我的最后一点 - 我没有看到这里提到的注销机制,以及注销是如何执行的。基本假设是,只要用户注销,您就会使会话cookie失效,并且不会再次接受该会话cookie。如果您还没有这样做,那么您可以做其他事情来确保会话的安全性。

+0

会话连接到后端的用户。如果用户的cookies在另一个客户端被攻破并重新使用,那么没有机制来阻止SessionID。但是如果我的会话连接到IP地址,那么dhcp lease expired也会使会话失效,对吧?有没有另外一种方法呢?像一些'浏览器ID'?注销功能存在,基本上删除后端的cookie和会话。 – 2012-07-22 08:14:40

+1

对于更受欢迎的ISP而言,这种可能性并不高,但它始终存在。我是一个更偏执的安全人员,所以如果知识产权发生变化并让他们重新认证,我会说会话无效 - 但是,这不是用户友好的,可能不是您想要的。唯一的浏览器ID很难创建,并且很容易被欺骗。一个好的(也有点难)解决方案是拥有不断更新自身的短期会话ID。因此,如果旧会话ID有效,请创建新会话ID,使旧会话ID无效。所以,即使一个cookie被盗,它的短暂存在,所以它已经过期了。 – 2012-07-23 21:40:50

+0

好的,我将应用IP限制,如果用户没有报告问题,我将把它留在那里。我不认为会有更多的反馈意见。似乎只有少数变化,解决方案“足够安全”,因此我将关闭Q以供其他人参考。 – 2012-07-24 17:51:02

相关问题