【问题标题】:Authentication model of a javascript app using ajax使用 ajax 的 javascript 应用程序的身份验证模型
【发布时间】:2012-07-18 13:47:35
【问题描述】:

这不是关于某些 javascript 细节的特定问题,但我正在寻找验证,即我创建的模型中没有明显的漏洞。我决定推出自己的身份验证例程(除了在后端使用 bcrypt 散列),它将像这样工作:

  1. 用户(浏览器或 phonegap 创建的本机应用程序)注册 > 使用 jQuery ajax 发布到使用 bcrypt 处理密码并保存密码用户配置文件数据的后端的 Json 对象
  2. 后端生成并使用客户端 IP 地址保存它返回的令牌(随机哈希,如 /dev/urandom)
  3. jQuery 插件将令牌存储到本地 cookie 中
  4. 当发出一些请求(发布、评论等,但不是太频繁)时,它会从 cookie 中获取令牌并将其添加到 json 中,然后使用 ajax 再次发布
  5. 后端检查令牌是否存在且未过期(有效期为 7 天),检查 ip 地址是否相同,如果正常则验证请求 json 数据并处理请求
  6. 当令牌过期时,会显示登录屏幕并以 ajax 形式发布凭据,并在步骤 2 中创建新令牌。

ajax 请求的所有内容都通过 ssl 进行,并且没有密码存储在任何地方。如果超过阈值,还有一种机制检查暴力令牌垃圾邮件会暂时阻止源 IP。这不是一个高安全性的应用程序,但希望尊重用户数据并确保它“足够”安全。

我希望这个问题是合格的,即使它并不具体,并且如果它会引发一些讨论,它可以作为其他人的参考。我找不到任何关于这种特定方法的最佳实践教程。

更新:根据收到的反馈更新身份验证机制,因为它对于非关键 Web 应用程序似乎“足够安全”。

【问题讨论】:

  • 生成一个随机token,比如/dev/urandom不要使用md5,它坏了,不是一次性使用token的最佳工具。
  • 感谢您的提示,我将研究另一种生成令牌的方法。你能告诉我创建一个随机的阿尔法数字字符串是如何破坏的,因为我没有使用它来散列密码等吗?熵是比替代品差还是别的什么?

标签: javascript jquery ajax security authentication


【解决方案1】:

鉴于您说您的应用程序不是高安全性应用程序,并且您希望基本的安全控制措施到位,我试图从高层次的角度涵盖我能想到的所有内容。

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

我看到这里缺少一些东西——它们可能被省略了,或者它们可能不存在,所以我将全部提及。第一件事 - 您没有提到您是否确保用户与您收到的 cookie 之间存在匹配。您需要确保这两个匹配,这样一个用户就无法窃取第二个用户的会话。

我看到这里缺少的第二件事是验证 cookie 不是从用户那里窃取的。例如,如果我设法从用户​​那里窃取会话 cookie,并从不同的地方在我自己的计算机上重放它,我仍然可以使用当前会话处理机制登录。

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

这就引出了我的最后一点——我没有看到这里提到的注销机制,以及注销是如何执行的。基本假设是您将在用户注销后立即使会话 cookie 无效,并且您不再接受该会话 cookie。如果您还没有这样做,那么您可以采取其他措施来确保会话的安全性。

【讨论】:

  • 一个会话连接到后端的用户。如果用户 cookie 被破坏并在另一个客户端上重新使用,则没有适当的机制来阻止 SessionID。但是,如果我有会话连接到 IP 地址,那么 dhcp 租约到期也会使会话无效,对吗?还有另一种方法吗?像一些“浏览器 ID”?注销功能存在,基本删除后台的cookie和session。
  • 这种可能性对于更流行的 ISP 来说并不高,但它总是存在的。我是一个更偏执的安全人员,所以我会说如果 IP 更改并让它们重新验证,则使会话无效 - 但是,这不是用户友好的,可能不是你想要的。唯一的浏览器 ID 很难创建,也很容易被欺骗。一个好的(也更难一点)的解决方案是让会话 ID 能够持续更新自身。因此,如果旧会话 ID 有效,则创建新会话 ID,使旧会话 ID 无效。因此,即使 cookie 被盗,它也是短暂的,所以它已经过期了。
  • 好的,我将应用 ip-restriction,如果用户没有报告任何问题,我会将其留在那里。我认为不会有更多关于此的反馈。似乎通过一些更改,解决方案“足够安全”,所以我将关闭 Q 以供其他人参考。
猜你喜欢
  • 1970-01-01
  • 2018-12-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2011-06-27
  • 2014-09-29
相关资源
最近更新 更多