【问题标题】:Best Way to Share Cookie with API to authenticate Users与 API 共享 Cookie 以验证用户身份的最佳方式
【发布时间】:2013-03-27 19:56:29
【问题描述】:

我已经编辑了我的问题并使其变得简单,因为我认为它含糊不清。所以 我已经让它变得简单了。 我想使用存储在浏览器中的 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 应用程序中。

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

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

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

【问题讨论】:

  • 模糊的问题,什么样的语言,什么样的api。可以发一些代码吗?
  • @Erwinus 我认为这个问题很清楚。让我解释。我的网站有 api 服务器,它仅在通过 get 或 post 向其发送秘密哈希时才响应。生成的秘密哈希。只有 API 可以验证其正确与否。出于安全原因,每次用户登录时哈希值都会发生变化,并将其存储在 cookie 中。您将如何将该哈希值发送到 api 服务器以与思想 js 进行通信,因为在登录请求 api 后将仅从客户端完成多次以接收 json 数据。
  • 就像我之前说的,没有代码我们无法为您提供帮助!我了解您要做什么,但不清楚您是如何实现的,也许您的实现是错误的。
  • @Erwinus 嗨。我更新了我的问题,我已经描述了我的算法,因为我还没有编码。
  • @Erwinus 所说的模糊问题,但是使用 SSL 怎么样? stackoverflow.com/questions/12068249/…

标签: php javascript api security


【解决方案1】:

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

  • 确保哈希中的盐足够长(为了安全起见,我只使用 32 个字符,虽然这有点多)。
  • 确保盐确实是散列函数中的最后一个组件。如果不是,在某些情况下,攻击者可能会创建自己的 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 的会话将不再有效。

【讨论】:

  • +1 以获得很好的答案。是的,盐(及其长度)是整个事情中最重要的部分,因为这是随机性的来源,因此攻击者无法制作自己的 cookie。很好地调用分隔符;-) 为什么盐需要放在最后?既然都是散列,那有关系吗?攻击者在什么情况下能够创建自己的 cookie?我现在相信你的话,但我很好奇。
  • @Freedom_Ben:我明确提到了分隔符,因为我在现实世界的系统中看到了一个漏洞,因为省略了分隔符。 :D 关于元素的顺序:看看en.wikipedia.org/wiki/Length_extension_attack 看看如果最后一个位置没有秘密会发生什么。
  • 感谢您的链接!这是我以前从未听说过的一种引人入胜且晦涩难懂的攻击。干得好。
  • @thejh 这将是使用此哈希直接通过 api 将文件上传到服务器的最佳或安全方式吗?
  • @AbhishekGahlot:我想我目前无法在这个概念中提出任何问题。
猜你喜欢
  • 2018-04-01
  • 2015-09-07
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2015-07-14
  • 2020-10-12
  • 2020-06-06
  • 1970-01-01
相关资源
最近更新 更多