Facebook API: 封锁 Heroku 服务器的 IP 地址

16

我的Heroku PHP Facebook应用程序日志中一直出现以下错误:

[app web.20] PHP Fatal error: Uncaught OAuthException: (#5) Unauthorized 
source IP address\n thrown in /app/www/sdk/src/base_facebook.php on line 1238

我还注意到同一台服务器会一直出现这个错误,直到我重新启动进程(例如,在上面的情况下,web.20web.6会不断失败),但是在执行heroku ps:restart之后,会出现其他不同的服务器失败。
现在,经过一些研究,我发现人们一直建议我在Facebook App ->高级设置页面中将我的服务器IP列入白名单,这意味着Facebook维护了一个黑名单IP列表,这就是您可以逐个允许访问它们的地方。这让我想知道为什么Facebook明显鼓励其用户使用Heroku进行Facebook应用程序开发,同时又将其服务器列入黑名单。
基本上是这样的:
  1. Heroku是Facebook的托管合作伙伴
  2. 每次应用程序被回收时,Heroku都会为其用户提供不可预测的IP地址
  3. Facebook已经列出了许多Heroku服务器的黑名单(根据我的计算,大约占10%)
  4. 因此,您无法保证您的应用程序将始终能够访问其API以满足您的所有请求
我的问题是:

像我这样的开发人员如何在Facebook赞助的Heroku环境中配置生产就绪的应用程序,而该环境显然会在大量API请求周围失败?


3
我也觉得这种情况很荒谬。重新启动 heroku 实例,期望它们能使用未被列入黑名单的 IP 地址,这并不是一个可行的解决方案。这篇文章提供了两个修复问题的选项。https://dev59.com/YGQo5IYBdhLWcg3wZepg - Jody
自从周四以来,我们也遇到了+1的问题。重新启动所有工作进程解决了这个问题,但现在它又出现了。 - shem
1
我也遇到了同样的问题 :( - coder9
也许这不是Heroku特定的问题,而是一些Facebook DoS预防策略或API调用限制策略导致了误报?如果我理解正确,许多Heroku应用程序可以共享相同的IP地址,因此Facebook可能会从同一IP接收到大量请求。 - Jan Wrobel
@JanWrobel 制定拒绝服务攻击预防策略是有意义的,但不必永久性地封锁 IP,只需在数小时内封锁恶意 IP 即可。 - Steven de Salas
显示剩余2条评论
3个回答

7

这很奇怪。我们正在调查。

编辑:这个问题应该已经解决了。请注意,Facebook阻止了那些IP地址,因为它们存在恶意行为。我们将继续与他们合作,防止再次发生,但你可以诚实地做的最好的事情是使用提供非共享IP的托管服务商。

此外,请参见:https://developers.facebook.com/bugs/649166715098648


4
我也经常遇到这个问题。几天前开始出现的,在Heroku上。 - Jeremy Haile
对我来说,这个问题是在27日星期六开始的...当我只运行一个dyno时,似乎问题会消失。 - handler
我们也遇到了同样的问题,从上周开始发生,似乎经常发生。 - jorilallo
当你遇到从Facebook涌入的巨大流量(比如一篇文章变得非常受欢迎时)时,单个IP并不是一个真正的选择。那么只阻塞冒犯的IP地址几个小时怎么样?这可以防止滥用API而不会永久禁用大量服务器人口。 - Steven de Salas
偶尔使用Facebook Messenger API时会遇到这个问题...我不得不重新启动我的dynos以重新分配IP地址:( - ProfNandaa

3

看起来 Facebook 由于某种原因开始阻止 Heroku 的 IP 地址。这不是 Heroku 可控的,只有 Facebook 才能解决。建议与 Facebook 支持团队联系。


0
在Heroku上,尝试使用Proximo这样的插件并观察会发生什么。我刚刚在我的上面进行了配置,现在正在监视是否会发生相同的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接