【问题标题】:Loading Facebook profile picture securely安全加载 Facebook 个人资料图片
【发布时间】:2011-06-28 10:35:55
【问题描述】:

我正在尝试包含来自 facebook 的用户个人资料图片,这可以正常工作,但问题是当您想要将其包含在受 SSL 保护的页面上时。我找不到从安全位置加载图片的方法。使用以下链接到用户个人资料图片:

https://graph.facebook.com/<FB_ID HERE>/picture?type=square

即使我使用 https,它也不能安全地加载(浏览器说页面只是部分加密)。这并不奇怪,因为链接只是重定向到图片,例如我的个人资料图片:

https://graph.facebook.com/Bazze/picture?type=square

这将从以下位置获取图片:

http://profile.ak.fbcdn.net/hprofile-ak-snc4/161513_633115680_6792455_q.jpg

请注意,这不是一个安全的位置。

有人知道如何通过 https 协议安全地加载头像吗?

谢谢!

【问题讨论】:

    标签: security facebook ssl https image


    【解决方案1】:

    您可以通过自己的服务器代理它。设置一个脚本,从 Facebook 获取图像,然后通过 SSL 将其返回给您。

    举例

    <?php
        $path=$_GET['path'];
        if (stristr($path, "fbcdn.")==FALSE && stristr($path, "facebook.")==FALSE)
        {
            echo "ERROR";
            exit;
        }
        header("Content-Description: Facebook Proxied File");
        header("Content-Type: image");
        header("Content-Disposition: attachment; filename=".$path);
        @readfile($path);
    ?>
    

    取自

    http://www.permadi.com/blog/2010/12/loading-facebook-profile-picture-into-flash-swf-using-open-graph-api/

    通过https://yourdomainhere.com/proxy.php?path=URLENCODED-IMG-URI 访问应该通过 SSL 返回用户图片。

    【讨论】:

    • 这可能是一个解决方案,但 Facebook 已经修复了这个“错误”,因此现在可以安全地提供图像 - 所以我的问题得到了解决。不过感谢您的回答。
    【解决方案2】:

    您还可以批量获取安全的个人资料图片,在这种情况下,您必须添加 return_ssl_resources=1 参数,如 @josh3736 所述。

    https://graph.facebook.com/?ids=id1,id2,id3,...&fields=picture&return_ssl_resources=1

    【讨论】:

      【解决方案3】:

      Add return_ssl_resources=1 拨打您的 Graph 电话:

      https://graph.facebook.com/<FB_ID>/picture?type=square&return_ssl_resources=1
      

      这是获取 SSL 服务图像的正确方法;重定向将指向具有正确 SSL 证书的 https 服务器。


      更新:当您使用 https://graph.facebook.com 时,Facebook 现在似乎会自动将您重定向到 https 托管的图像,因此 return_ssl_resources 参数不再是必要的。

      使用 http://graph.facebook.com 仍然可以获得 http 托管的图像。

      【讨论】:

      • 我正在为可能最终出现在这里的其他人提供这个答案。目前,只需将图像的链接从 http 更改为 https 即可。一个简单的image_url.sub(/http:/, "https:") 就可以了。
      • @Ashitaka:看起来 Facebook 最近将图形服务器更改为自动处理 http/https。我已经更新了答案。
      【解决方案4】:

      使用***http***://graph.facebook.com/Bazze/picture?type=square 代替**https**://graph.facebook.com/Bazze/picture?type=square

      【讨论】:

        【解决方案5】:

        302 重定向将包含您的图片 URL,如 Open Graph API 文档中所述。

        您需要更改的内容: /http profile.ak.fbcdn.net/ 到: /https fbcdn-profile-a.akamaihd.net/

        从:/http static.ak.fbcdn.net/到:/https s-static.ak.fbcdn.net/

        我真的认为 FB 应该在他们的 API 中做到这一点!!!!

        【讨论】:

          【解决方案6】:
          1. 这是一个安全的位置,只是不安全的重定向
          2. 您所能做的就是确保在调用图形 api 时使用安全请求,之后 Facebook 将接管通信,并且什么都做不了

          【讨论】:

            【解决方案7】:

            好吧,https://graph.facebook.com/Bazze/picture?type=square 是一个 302 重定向到 http://.... 但请注意 https://... 仍然有效(@987654322 @)。

            所以看起来一种解决方案是自己解析 302,在适当的位置插入“s”,然后获取图像。但不利的一面是,上面的链接页面存在证书错误,并且没有解决此问题的好方法。

            (我并不是说这是一个好的答案...)

            【讨论】:

            • 但是如果我包含带有graph...(安全)的图像,浏览器仍然声称该页面仅部分加密(是的,我确定这是导致的 fb 个人资料图片链接它)。
            • 我是说你必须包含一个带有profile.ak.fbcdn.net...的图像,这还需要通过解析302重定向来确定正确的'...'。但是,虽然这将消除“部分加密”问题,但它会引入证书错误问题。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-08
            • 1970-01-01
            • 2017-09-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多