gpt4 book ai didi

php - 安全地限制 API 速率,防止 IP 地址欺骗

转载 作者:可可西里 更新时间:2023-11-01 00:43:11 28 4
gpt4 key购买 nike

我正在使用 PHP、MySQL 和 Redis 开发 API,并希望对特定调用进行速率限制。 API 位于 CloudFlare 后面。为实现这一点,我将增加每个 IP 地址每小时在 Redis 中进行的特定调用的计数,如果超过限制,将显示错误。

但是,我相信我遇到了 IP 地址欺骗问题。我知道如果真正的客户欺骗了他们的 IP 地址,他们将永远不会收到回复,但这对于诸如创建帐户电话之类的电话来说可能不是必需的。客户端可以通过注册多个具有不同 IP 的帐户来有效地发起 DoS 攻击,同时始终避开速率限制。这会导致我的系统发送大量欢迎电子邮件(导致我的服务器被标记为垃圾邮件),并且如果他们的电子邮件帐户被恶意注册,可能会阻止用户注册。如何避免这种情况?

我的想法:

  • SSL 是否可以防止这种形式的 IP 欺骗?
  • 有没有办法确保客户端收到服务器的响应,从而确保它不是欺骗性 IP 地址?
  • 在传递 HTTP_CF_CONNECTING_IP header 时,cloudflare 是否以某种方式验证 IP 地址没有被欺骗?

感谢您的帮助和建议。

最佳答案

通常您会使用一个 secret token (API key 、登录凭据或其他)来标识用户并计算每个用户帐户的请求数。

由于您试图通过 IP 限制请求,我假设您将要创建一个“开放”API,任何人都可以在其中发送请求,而无需身份验证。

术语 *IP 欺骗在这种情况下不是问题。这是因为 - 除非他控制您的服务器和互联网之间的路由 - 欺骗攻击者不会得到答案(如您所说)。但是 HTTP(S) 是通过 TCP 传输的,建立 TCP 连接需要攻击者执行一次成功的握手,这需要从服务器接收连接 ID - 这意味着它需要接收答案。

TCP 协议(protocol)的维基百科页面可能是我开始的一个很好的外部资源:https://en.wikipedia.org/wiki/Transmission_Control_Protocol

您会看到IP 欺骗 不是问题。但是您需要明白,通过 IP 进行速率限制根本不是一个好的解决方案。那是因为:

  • 滥用者可以在达到限制后请求新的 IP
  • 您的 API 可能会被内部 IP 获取的大型组织使用由核心路由器进行 NAT,您只能看到该核心路由器 IP。

我强烈建议您使用身份验证(连同 SSL!) 并限制每个用户群的请求。


简要回答列出的问题(如果需要,可以解释更多)

Does SSL prevent this form of IP spoofing?

没有

Is there a way to make sure the client receives the server's response, thereby ensuring that it's not a spoofed IP address?

是的,它是在 TCP 中实现的 -> 请参阅上面维基百科链接中的 ACK

Does cloudflare somehow verify the IP address is not spoofed when passing along the HTTP_CF_CONNECTING_IP header?

如上所述。 HTTP 流量需要已建立的 TCP 连接。因此,这是没有意义的。

关于php - 安全地限制 API 速率,防止 IP 地址欺骗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com