【问题标题】:HMAC API exposed via public site?通过公共站点公开的 HMAC API?
【发布时间】:2018-01-16 19:46:56
【问题描述】:

我可以采取哪些步骤来防止未经授权访问我们的 API(如果确实需要)?

背景

下图说明了我们正在实施的微型网站,以及我们提供的 HMAC API(用于多种目的),它将商业敏感数据返回给经过身份验证的消费者。箭头代表有意(绿色)和无意(红色)的通信。

HMAC API 用于地址自动完成。微型网站没有登录名。该页面具有地址输入。要启用自动完成,页面会在每次击键后对控制器进行 AJAX GET 调用。对于每个 AJAX GET 调用,控制器都会构造 HMAC 并向 HMAC API 发出请求。

问题

我目前看不到任何阻止使用 AJAX GET 方法的东西。

注意事项

我已经read 说 AnitForgeryTokens 在 GET 方法上没有用,但是您可以通过将其转换为 POST 来解决这个问题。这听起来有点难看,但由于这只是一个微型网站(即我们将在一个月左右后将其丢弃),我已经准备好忍受丑陋的安全性。

七年后,这仍然是最好的方式吗?

【问题讨论】:

  • @Amy,我不认为 AJAX 调用可以通过身份验证,因为没有页面身份验证。但也许我错过了什么?
  • @Amy,令牌不是必须嵌入到页面中吗?因此可能被盗?
  • @Amy - cookie/embedded 没有任何区别,因为攻击者可以请求我们的页面,获取令牌,然后将其附加/嵌入到他的意外请求中。

标签: asp.net-mvc hmac antiforgerytoken


【解决方案1】:

防止未经授权访问未经身份验证的控制器上的方法

如果您没有任何身份验证和授权(“未经身份验证的控制器”),则不存在未经授权的访问:即允许所有访问。而且,不存在的东西是无法预防的。

如果您可以在用例中定义未经授权的访问意味着什么,您也许可以添加一些授权来阻止它。

【讨论】:

  • 对不起,我使用的术语具有技术含义,但我使用它的意义更广泛。 “未经授权”是指来自微型网站外部的任何请求。
  • @OutstandingBill:“外部”和“内部”到底是什么?如果“内部”是来自客户端的特定 IP 地址范围,您可以通过 IP 限制访问。如果“内部”意味着浏览器首先访问了微型站点,然后访问了 API,那么您必须为此提供证明,例如由微型站点签名的一些限时令牌,该令牌可以由 API 验证。
  • 我们不知道目标用户的 IP 地址。用户不访问 API,他们访问控制器(有人可能会说这实际上是一个 API,但我试图与我的图表保持一致)。无论如何,由控制器提供服务后,该页面可能包含一个生命周期有限的令牌。令牌可能被“偷走”并用于未经授权的调用(一般意义上)。
  • @OutstandingBill:如果对 API 的访问紧跟在微型站点的访问之后,那么令牌的生命周期可能非常短。如果您还使用 HTTPS 来保护令牌在生命周期内的传输窃取和使用,则不太可能。
  • 表单的性质意味着他们在请求和提交之间可能需要一段时间,并且自动完成可能会在两者之间的任何时间发生。
猜你喜欢
  • 2016-02-20
  • 2015-04-30
  • 2011-02-14
  • 1970-01-01
  • 2017-02-21
  • 2013-03-18
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多