2

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

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

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

于 2012-07-21T08:42:26.293 回答