2

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

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

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

编辑:

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

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

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

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

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

如果有人认为这种方法易受攻击或不安全,这就是我的计划。请让我知道。是的,对于我将使用的跨域请求

header("Access-Control-Allow-Origin: *") 或 header("Access-Control-Allow-Origin: 'www.website.com'")

但如果你有备用。请描述我可以使用 jsonp 但我不想,而且我可能也必须上传文件数据。

4

1 回答 1

3

您提出的解决方案听起来不错。但是,您应该确保以下几点:

  • 确保哈希中的盐足够长(为了安全起见,我只使用 32 个字符,尽管这有点多)。
  • 确保盐确实是散列函数中的最后一个组件。如果不是,在某些情况下,攻击者可能会创建自己的 cookie(方法如下)。
  • 进行散列时使用分隔符。比如有一个用户foo,又有另一个用户foo1,不使用分隔符会出现这种情况:foo第11次登录时,他的cookie是hash("foo11"+salt)foo1第一次登录时,他的cookie也是hash("foo11"+salt)。 . 那会很糟糕,所以做类似的事情hash(user+"|"+login_attempt+"|"+salt)
  • Access-Control-Allow-Credentials: true我认为,您的 API 服务器也必须发送标头。

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

于 2013-03-30T10:12:38.020 回答