微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 安全地限制API,防止IP地址欺骗

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

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

我的想法:

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

感谢您的帮助和建议.

解决方法:

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

由于您尝试通过IP限制请求,因此我假设您要创建一个“开放式”API,任何人都可以发送请求,而无需身份验证.

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

TCP协议的维基百科页面可能是一个很好的外部资源: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连接.因此这没有任何意义.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐