【问题标题】:Authentication - key in each ajax身份验证 - 每个 ajax 中的密钥
【发布时间】:2013-12-08 22:10:53
【问题描述】:

我正在编写新应用程序,这次我想将 HTML/JS 层与 PHP 层完全分开。那是因为我以后会做phonegap版本。

我对身份验证有疑问。这次我不能使用会话变量,所以我必须找出新的身份验证方式。我打算这样试试:

  1. 用户填写登录表单并通过ajax发送到php文件。
  2. php 文件检查登录名和密码是否正确,然后为该用户创建一个密钥令牌。将其保存在他身边(例如在 mysql 中)并以 javascript 的形式返回给客户端。
  3. 浏览器正在接收密钥令牌并将其保存在 session_storage 中。
  4. 每个 ajax 请求都由这个令牌附加,然后由 php 验证。

这个计划有漏洞吗?也许有更容易/更好的解决方案。它的灵感来自 php 会话的工作方式,但使用密钥令牌而不是会话 ID。请帮帮我。

【问题讨论】:

  • 嗯,你的做法应该足够好了。您甚至可以加密令牌并根据您定义的参数(例如外部 ip、存储在数据库中的临时会话 ID 等)在每个请求上验证令牌。
  • 您重新发明了会话管理。 “但是使用 key-token 而不是 session id”——“key-token”和 session id 有什么区别?为什么不能将“会话 ID”视为令牌?
  • 这是OAuth2的基础。值得您花时间研究在您的后端实施 OAuth2 解决方案,以便您可以执行 Web 应用程序、phonegap,甚至展示您自己的 API。

标签: javascript ajax authentication


【解决方案1】:

我不能使用会话变量

您所描述的内容完全听起来像一个会话,但您将自己实现自己,而不是使用标准 PHP 会话处理程序的已知、经过测试的属性和灵活性。因此,即使您避免了固有的设计缺陷,您也有在实现中注入缺陷的风险。

我强烈建议您使用标准的 PHP 机制(尽管您可能需要考虑更复杂的保存处理程序,即使它只是启用多层功能)。

鉴于您所描述的与 PHP 处理程序没有什么不同,那么,是的,如果实施正确,它将起作用 - 它安全吗?不是您提供的信息。

会话存储确实提供了在不借助 SSL 的情况下执行更安全操作的可能性(尽管如果安全很重要,HTTPS 是必须拥有),因为您可以预先共享加密密钥(但最初的密钥协商非常容易受到攻击)。

您所描述的OTOH容易受到嗅探、注入和CSRF的攻击。

【讨论】:

  • 我很想使用标准 php 机制,但据我所知,它不适用于跨域 ajax。我说的对吗?
  • 同样,您的问题中没有任何内容表明您的方法与 PHP 会话在跨域 Ajax 方面有何不同。
  • 也许您可以更新您的问题以显示跨域身份验证如何与您的模型一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 2013-02-15
  • 2019-09-04
  • 2012-02-04
相关资源
最近更新 更多