【问题标题】:Prevent a public service from overusing防止公共服务过度使用
【发布时间】:2016-11-15 09:59:47
【问题描述】:

我有一个要在 azure-app-service 上托管的 Web api 2。该服务应该由 javascript 应用程序调用,据我所知它必须向公众开放(对吗?)。

但是,如果我让它完全打开,它很容易受到 DOS 攻击。最好的方法是什么?

我想到的第一件事是实现一个自定义 IP 过滤器,它可以保留最近 x 分钟的请求,并让出现次数少于 y 的请求通过。

还有其他方法吗?有没有什么具体的方法可以在不写代码的情况下在天蓝色上做到这一点?


这不是一个广泛的问题!我想我在问什么很清楚! 我在 Azure 上有一项服务,我想保护它免于过度使用。那有多宽?!?!

【问题讨论】:

  • cloudfare 或类似服务?
  • @4c74356b41 对不起,我没有收到你的问题

标签: c# security azure asp.net-web-api2 azure-web-app-service


【解决方案1】:

如果它是一个公共 API(即移动应用程序可以与之通信的东西),它必须是……嗯,当然是公共的。 :)

如果您的用户必须在使用您的 API 之前注册(或者如果这是一个选项),您可以使用 API 密钥。这不会阻止 DoS,并且如果提供给客户端也不是一种身份验证形式,但至少您可以快速撤销违规密钥以在一定程度上缓解 DoS。

除此之外,您对 DoS 的主要关注是应用程序级别的 DoS。您应该尽量避免 API 调用给您的后端带来压力、限制响应大小(这可能意味着在客户端上进行分页)等。在您的 API 中完成这些事情后,让您的提供商处理网络级别的事情。

【讨论】:

  • 感谢您的回答。我想将我的服务用作注册服务。因此,如果您注册,您将收到一封电子邮件。现在,一个人可以在 1 天内使用我的服务数千​​次,我最终将拥有一个充满不需要数据的数据库,以及一个被归类为垃圾邮件创建者的电子邮件服务器
  • 您可以对给定客户端 IP 的注册操作进行速率限制,并且不要让它过于频繁地调用注册。这还取决于您的典型客户端是否位于 NAT(典型的企业用户)之后(典型的家庭用户)。您也不应该在发送的电子邮件中包含任何用户内容,因此使用他人的电子邮件地址进行注册的意义不大。您不应该向同一个地址发送太多电子邮件。这些可能有助于减轻您描述的风险(顺便说一句,这是非常有效的)。
  • 您好,我现在正在尝试在我的 azure 门户上设置速率限制。但是这里说我需要为 api 管理服务(开发人员)支付 50 美元,为标准服务支付 700 美元,这比我的生产环境贵 10 倍 :(。我在正确的地方吗?有没有更便宜的选择?
【解决方案2】:

默认情况下,Azure 服务受到 DDOS、MITM 攻击的保护,所有通信均通过 https 并加密。

就应用程序设计而言,您需要注意以下事项; SQL 注入、会话劫持、跨站点脚本、应用级 MITM 和应用级 DDoS。

您还可以使用 Tinfoil 安全扫描测试对您的应用服务进行漏洞检查。 https://azure.microsoft.com/en-us/blog/web-vulnerability-scanning-for-azure-app-service-powered-by-tinfoil-security/

还可以使用 Azure API 管理服务,您可以使用 API 网关来控制 API 调用、路由、强制使用配额以及根据 API 的流量进行节流。

https://azure.microsoft.com/en-in/documentation/articles/api-management-howto-product-with-rules/

【讨论】:

  • 感谢您的回复,我现在正在尝试在我的 azure 门户上设置速率限制。但是这里说我需要为 api 管理服务(开发人员)支付 50 美元,为标准服务支付 700 美元,这比我的生产环境贵 10 倍 :(。我在正确的地方吗?有没有更便宜的选择?
  • 是的,就是这样。或者你可以试试其他的api管理产品,比如3scale、app42等,可能更便宜。但不确定 azure 集成。
猜你喜欢
  • 1970-01-01
  • 2016-08-11
  • 2018-05-28
  • 1970-01-01
  • 2012-04-16
  • 2018-05-14
  • 1970-01-01
  • 2014-07-22
  • 2015-04-21
相关资源
最近更新 更多