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

时间:2015-01-22 19:30:25

标签: php api security ip-address cloudflare

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

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

我的想法:

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

感谢您的帮助和建议。

2 个答案:

答案 0 :(得分:5)

通常,您将使用标识用户的秘密令牌(API密钥,登录凭据或其他),并计算每个用户帐户的请求数。

由于您试图通过IP限制请求,我假设您即将创建一个" open"任何人都可以发送请求的API,无需身份验证。

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

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

您认为 IP欺骗不是问题。但是你需要明白IP的速率限制根本不是一个好的解决方案。那是因为:

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

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


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

  

SSL是否会阻止这种形式的IP欺骗?

没有

  

有没有办法确保客户端收到服务器的响应,从而确保它不是欺骗性的IP地址?

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

  

在传递HTTP_CF_CONNECTING_IP标头时,cloudflare是否以某种方式验证IP地址是否被欺骗?

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

答案 1 :(得分:0)

  

SSL是否会阻止这种形式的IP欺骗?

它只能防止中间人(MitM)攻击,因为欺骗者无法轻易解密消息。

  

有没有办法确保客户端收到服务器的响应,   从而确保它不是一个欺骗性的IP地址?

防御机制 首先,确保正确配置防火墙和路由器,并限制来自互联网的伪造流量的推进。 - See more at:

  

cloudflare是否会以某种方式验证IP地址何时不被欺骗   传递HTTP_CF_CONNECTING_IP标题?

除非您使用上述采用ACL的文章中提到的特殊设备,否则无法真正验证IP地址。

我希望这会有所帮助。