【问题标题】:website with basic http auth and facebook social plugin, twitter button具有基本 http auth 和 facebook 社交插件、twitter 按钮的网站
【发布时间】:2013-01-09 03:03:54
【问题描述】:

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

【问题讨论】:

    标签: facebook authentication twitter


    【解决方案1】:

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

    【讨论】:

    • 制作了一个快速脚本来生成一个 htaccess,它可以执行简单的身份验证,但 FB 爬虫除外,以防它对任何人都有帮助。 FB 说他们改变了爬虫的 IP,所以你需要经常执行 cron 来重新生成 htaccess gist.github.com/xenotropic/9d4570cfa956553166c8665ba34a8e08
    【解决方案2】:

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

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

    PHP 中的一个例子 -

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多