2011-05-19 56 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