2

我正在一个关于登台环境的网站上工作。在登台环境中,网站使用 http 基本身份验证。而且我发现如果启用了 http 基本身份验证,facebook 社交按钮和推文分享按钮将不起作用。有什么解决方法吗?或者我应该完全禁用http基本身份验证

4

2 回答 2

3

更好的解决方案可能是利用Facebook 应用程序安全文档中提供给我们的一些信息。截至 2012 年 8 月,Facebook 将这些 IP 地址列为其服务器用来访问外部站点的 IP 地址:

31.13.24.0/21
31.13.64.0/18
66.220.144.0/20
69.63.176.0/20
69.171.224.0/19
74.119.76.0/22
103.4.96.0/22
173.252.64.0/18
204.15.20.0/22

2401:db00::/32
2620:0:1c00::/40
2a03:2880::/32

要获取更新的列表,您可以使用此命令 -

whois -h whois.radb.net -- '-i origin AS32934' | grep ^route

所以你会使用一些类似于这个 PHP 版本的代码 -

if(in_array($_SERVER["REMOTE_ADDR"],$arrayOfIPAddresses) === TRUE){
  // current request is coming from Facebook's IP
}else{
  // current request is not from Facebook
}
于 2013-01-25T10:33:06.213 回答
1

此解决方案取决于您的基本身份验证方法对您的重要性。不过,您已经准确地确定了您的问题 - 事实上,Facebook 的服务器无法访问需要密码的页面。

您似乎愿意禁用此密码身份验证,这让我相信它的目的只是混淆对登台服务器的访问,而不是保护它。如果这是真的,那么有一些简单的方法可以让 Facebook 的服务器访问数据,同时仍然要求到达您页面的普通用户(可能是偶然的)输入密码。一种这样的方法是检查与请求一起发送的用户代理 -

PHP中的一个例子 -

if(stristr($_SERVER["HTTP_USER_AGENT"],'facebook') === FALSE){
  // require password
}else{
  // allow request with user agent containing Facebook  
}

现在必须在这里说,用户代理字符串可以被欺骗/伪造,不应该被认为足够准确,不能被 100% 信任。

于 2013-01-25T10:28:43.093 回答