使用API​​共享Cookie以验证用户身份的最佳方式

时间:2013-03-27 19:56:30

标签: php javascript api security

我已经编辑了我的问题,并且因为我认为它含糊不清。所以 我做得很简单。 我想使用存储在浏览器中的cookie来使用API​​对用户进行身份验证。当然,cookie会在每次登录时随机更改。

信息知识:在后端使用自定义API和php

Javascript和Tempojs作为模板引擎前端。

编辑:

我的算法是这样的: 数据库只有一个字段,在每次登录尝试时都会更改,每次登录都会增加。

当用户使用php登录时。生成会话和cookie,并且用于连接到api的一个cookie将是

hash of (username + login attempt+ salt)= xxxxxxxyyyyyyxxxxxx

现在Api知道cookie值应该是什么,因此它验证用户是否正确并响应数据。现在,只要用户注销cookie过期,api就不能再进行身份验证。 我将使用什么来获取用户的数据我将发布

Cookie通过xmlhttprequest到api服务器,该服务器位于不同的子域,并将数据加载到Web应用程序中。

如果有人认为这种方法很脆弱或不安全,这是我的计划。请告诉我。 是的跨域请求我将使用

标题(“Access-Control-Allow-Origin:*”) 要么 标题(“Access-Control-Allow-Origin:'www.website.com'”)

但是,如果你确实有替代。请说明我可以使用jsonp,但我不想,而且我也可能必须上传文件数据。

1 个答案:

答案 0 :(得分:3)

您提出的解决方案听起来不错。但是,您应该确定一些事项:

  • 确保哈希中的salt足够长(我只使用32个字符以保证安全,但这有点多了。)
  • 确保salt确实是哈希函数中的最后一个组件。如果不是,攻击者可能会在某些情况下创建自己的cookie(here's how)。
  • 执行哈希时使用分隔符。例如,如果有一个用户foo并且还有另一个用户foo1,如果您不使用分隔符,则会发生这种情况:当foo第11次登录时,他的cookie是hash("foo11"+salt),当foo1第一次登录时,他的Cookie也是hash("foo11"+salt)。那会很糟糕,所以做hash(user+"|"+login_attempt+"|"+salt)之类的事情。
  • 我认为您的API服务器也必须发送Access-Control-Allow-Credentials: true标题。

哦,还要记住,当用户从计算机A登录然后从计算机B登录时,他在计算机A上的会话将不再有效。