2011-05-19 51 views
1

我正在使用PHP代理脚本将来自Facebook的图像加载到Flash中,而没有任何沙箱侵犯。它来自这里的指南:http://www.permadi.com/blog/2010/12/loading-facebook-profile-picture-into-flash-swf-using-open-graph-api/。相关的PHP代码是:Facebook代理加载器安全

<?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免遭反编译,但是我可以防止脚本被恶意使用吗?

回答

3

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

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

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

这些是要记住的一些事情。如果你仔细考虑一下,你可能会透露更多。

+0

谢谢,你给了我很多想法。我将从这些开始。 – shanethehat 2011-05-19 13:15:31

+0

你可否详细说一下第一点?你是否意味着请求中包含已知Facebook服务器列表中的名称? – shanethehat 2011-05-19 13:17:54

+0

是的。使用parse_url可以确保域名(不是URL的任何其他部分)以已知的域名结尾。只需检查第二级域名(.facebook.com,.fbcdn.net结束等等)。 – 2011-05-19 13:35:22