网站上有基本的http auth和facebook社交插件,twitter按钮

时间:2013-01-25 06:59:05

标签: facebook authentication twitter

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

2 个答案:

答案 0 :(得分:1)

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

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

PHP中的一个例子 -

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

现在必须说的是,用户代理字符串可以被欺骗/伪造,并且不应该被认为足够准确以至于100%被信任。

答案 1 :(得分:1)

更好的解决方案可能是利用Facebook application security documentation中提供给我们的一些信息。截至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
}