【问题标题】:Web security question regarding an API有关 API 的 Web 安全问题
【发布时间】:2010-11-29 09:29:05
【问题描述】:

我正在构建一个没有服务器端身份验证的 API。将为会话生成一个唯一的密钥(假设密钥很长且无法猜测),但不会在客户端上设置 cookie。客户端可以是带有 AJAX 的 Web 浏览器、使用 CURL 的 PHP 脚本或桌面应用程序。我想象的正常交易流程是:

初遇

  1. 客户端发出初始请求,调用 start_session 方法
  2. 服务器生成一个密钥并将其与一些初始数据一起返回
  3. 客户端存储密钥供以后使用(例如 JavaScript 使用密钥设置 cookie)

下一个请求

  1. 客户端再次请求服务器,调用一些 set_data 方法,提供原始会话密钥,以及诸如信用卡号、法律案件信息等私人数据的负载。
  2. 服务器响应,并且响应成功消息

另一个请求

  1. 客户端再次请求服务器,提供原始会话密钥,并调用一些 get_data 方法
  2. 服务器以某种格式(例如 XML、JSON 等)响应所有私有数据

如果不使用,会话密钥将在 20 分钟后过期,并且所有 API URI 都需要 SSL

我的担忧/问题是:我是否需要担心客户端是否泄露了会话密钥。如果没有身份验证,我相信原始请求者会将会话密钥保密。这是常见/安全的做法吗?

【问题讨论】:

  • 确定不可能猜到吗?
  • 你怕什么?攻击者可以控制什么?客户是谁/在哪里?客户是谁写的?
  • @SLaks -(关于两组问题)1)会话密钥是来自 Python 库的 2 个不同 UUID 的组合。用今天的计算机“猜测”密钥(即使使用棘手的数学技术)需要超过 50 亿年的时间。 2)我本身不怕任何人。任何想使用 API 的人都可以使用。如果你有一个www.my-stupid-site-that-uses-an-api.com 的网站,并且你在你的页面中编写了一些 AJAX 代码(以及用于 x-site AJAX 的代理脚本),你可以使用 API,所以我真的无法控制谁使用它。通常可以吗?
  • 您是在询问使用您的 API 的任意公众成员是否理智?
  • @SLaks - 我不是在问用户是否理智,或者用户是否有可能将私人数据放入他们的会话中,查看他们的 cookie,最后将他们的会话密钥放在他们博客的主页上页。我在问这样做是否是一种普遍接受的安全做法,或者是否有任何明显的理由我不应该这样做(或者可能是在这种情况下人们可能容易忽略的技术安全问题)。

标签: api security session-cookies


【解决方案1】:

除非您始终使用 HTTPS,否则您很容易受到 HTTP 嗅探,a la Firesheep。

Eve,如果您确实使用 SSL,如果客户端页面不是 SSL 或包含任何非 SSL Javascript(或同一域中的非 SSL 框架),您仍然容易受到攻击(而且您无能为力关于它)

要回答您提出的问题,这完全取决于您的情况。
编辑:您应该在文档页面中警告您的客户(开发人员)正确处理密钥。
除此之外,这取决于客户的平均技能水平。
您可能应该有某种免责声明(我不是律师)。

应该没问题。

【讨论】:

  • “这完全取决于您的情况”如何回答问题?
  • @oro:它告诉你,你提出的问题没有答案。
  • 谢谢。您答案的“编辑”部分与我得出的结论相同,但我不确定我是否过度简化了这些问题。顺便说一句,“a la”的意思是“在”。如果你想要法语,那就是“avec Firesheep”。
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 2017-04-23
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
相关资源
最近更新 更多