Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax的javascript应用程序的身份验证模型_Javascript_Jquery_Ajax_Security_Authentication - Fatal编程技术网

使用ajax的javascript应用程序的身份验证模型

使用ajax的javascript应用程序的身份验证模型,javascript,jquery,ajax,security,authentication,Javascript,Jquery,Ajax,Security,Authentication,这不是一个特定于javascript细节的问题,但我希望验证我创建的模型中是否没有明显的漏洞。我决定推出自己的身份验证例程(除了在后端使用bcrypt散列),其工作方式如下: 用户(浏览器或phonegap创建的本机应用程序)注册>使用jQuery ajax发布到后端的Json对象,该后端使用bcrypt处理密码并保存密码用户配置文件数据 后端生成并使用客户端IP地址保存它返回的令牌(随机散列,如/dev/uradom) jQuery插件将令牌存储到本地cookie 当发出某个请求(post、c

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

  • 用户(浏览器或phonegap创建的本机应用程序)注册>使用jQuery ajax发布到后端的Json对象,该后端使用bcrypt处理密码并保存密码用户配置文件数据
  • 后端生成并使用客户端IP地址保存它返回的令牌(随机散列,如/dev/uradom)
  • jQuery插件将令牌存储到本地cookie
  • 当发出某个请求(post、comment等,但不太频繁)时,它会从cookie中获取令牌,并将其添加到json中,然后使用ajax再次发布
  • 后端检查令牌是否存在且未过期(有效期为7天),检查ip地址是否相同,如果确定,则验证请求json数据并处理请求
  • 当令牌过期时,将显示登录屏幕,凭证将作为ajax发布,并创建一个新令牌,如步骤2所示
  • 对于ajax请求,所有内容都要通过ssl,任何地方都不会存储密码。还有一种机制,用于检查暴力令牌垃圾邮件,如果超过阈值,则暂时阻止源ip。这不是一个高安全性的应用程序,但希望尊重用户数据并确保其“足够”安全

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


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

    鉴于你说你的应用程序不是一个高安全性的应用程序,我已经尝试从高层次的角度涵盖我能想到的所有内容,你需要基本的安全控制措施

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

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

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

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


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

    生成一个随机令牌,例如
    /dev/uradom
    不要使用md5,它已损坏,并且不是一次性使用令牌的最佳工具。感谢您的提示,我将研究生成令牌的替代方法。你能告诉我创建一个随机的alfa数字字符串是如何被破坏的,因为我没有用它来散列密码等吗?熵是否比备选方案或其他东西更糟糕?会话连接到后端的用户。如果用户cookie被压缩并在另一个客户端上重复使用,则没有适当的机制来防止SessionID。但如果我有连接到ip地址的会话,那么dhcp租约到期也会使会话无效,对吗?还有别的办法吗?像一些“浏览器ID”吗?注销功能存在,基本上会删除后端的cookie和会话。这种可能性在较流行的ISP中并不高,但总是存在的。我是一个更偏执的安全人员,所以我会说,如果IP发生变化,请使会话无效,并让他们重新验证-然而,这不是用户友好的,可能不是您想要的。唯一的浏览器ID很难创建,也很容易伪造。一个好的(也是更难一点的)解决方案是使用持续更新自己的短期会话ID。所以,若旧会话ID有效,那个么创建新会话ID,使旧会话ID无效。因此,即使cookie被盗,它的寿命也很短,因此它已经过期了。好的,我将应用ip限制,如果用户没有报告任何问题,我将把它留在那里。我不认为会有更多的反馈。似乎只有很少的改动,解决方案“足够安全”,所以我将关闭Q以供其他人参考。