【问题标题】:Facebook Proxy Loader SecurityFacebook 代理加载程序安全性
【发布时间】:2011-05-19 11:58:46
【问题描述】:

我正在使用 PHP 代理脚本将图像从 Facebook 加载到 Flash 中,而不会违反任何沙盒。它取自此处的指南:http://www.permadi.com/blog/2010/12/loading-facebook-profile-picture-into-flash-swf-using-open-graph-api/。相关的PHP代码是:

<?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);
?>

该指南提到建议为现实世界的应用程序采取额外的安全措施。对此有何额外措施?也许某种从 Flash 传递到 PHP 的密钥?

我意识到我无法完全保护 Flash 不被反编译,但我可以防止脚本被恶意使用吗?

【问题讨论】:

    标签: php flash security facebook proxy


    【解决方案1】:

    您应该限制代理从 Facebook 获取图像文件。您当前的“保护”将允许例如此 URL:http://virus.provider.com/fbcdn./virus.exe

    • 更好地检查域 bname,可能使用 parse_url 函数。
    • 检查您确实只提供图像。确保文件名以图像扩展名结尾(这对 Windows 客户端很有帮助),但也要考虑对实际文件内容进行更彻底的检查。
    • 考虑添加对$_SERVER['HTTP_REFERER'] 的检查,以降低使用您的脚本进行盗链的动机。如果 HTTP_REFERER 不为空,请检查它是否真的是您的站点。这将主要保护您免受带宽窃贼的侵害。
    • 确保它实际上是一个远程路径。您当前的脚本可能会被诱骗发送例如未解析的 PHP 文件,包括密码和其他机密!
    • Content-Disposition 标头中的 filname 应设置为文件名,而不是整个路径。

    还可以考虑在代理服务器上缓存文件数据,以加快对同一文件的多次调用。

    这些是需要牢记的一些事项。如果您考虑一下,您可能会透露更多信息。

    【讨论】:

    • 谢谢,你给了我很多思考。我将从这些开始。
    • 能否详细说明第一点?您的意思是确保请求包含已知 Facebook 服务器列表中的名称吗?
    • 是的。使用 parse_url 您可以确保域名(不是 URL 的任何其他部分)以已知域名结尾。只需检查二级域(.facebook.com、.fbcdn.net 等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多