2013-04-10 151 views
1

我有我的ftp/php跨域請求的問題。通過我的瀏覽器,我可以通過傳遞如下參數來訪問內容:http://xxx.org/models/get.php?file=default_app/y_car_new/stock.jpg。但用JavaScript相同的鏈接給了我地http://localhost:8000 is not allowed by Access-Control-Allow-Origin 我已經嘗試過PHP來源是不允許的訪問控制允許來源

標題(「訪問控制允許來源:*」)

與下面的腳本沒有運氣。我有一個get.php文件在我的ftp訪問只有服務器與以下代碼:

<? 

if(isset($_GET["file"])) { 
    $filepath = "/.../models/".$_GET["file"]; 
    //echo "path: " , $filepath; 
    $filetype = pathinfo($filepath); 
    //echo $filetype['extension'], "\n"; 
    header('Access-Control-Allow-Origin: *'); 
    header('Content-Type: '.$filetype['extension']); 
    // //header('Content-Type: application/octet-stream'); 
    header('Content-Length: ' . filesize($filepath)); 
    ob_clean(); 

    readfile($filepath); 
}//if 

else { 
    echo '<img src="http://stupidbadmemes.files.wordpress.com/2013/02/no-you-may-not.jpg"></img>'; 
} 


?> 

我在這個腳本中做錯了什麼?

+0

發送跨來源頭與響應一起是有點兒毫無意義的。這就像授予訪問銀行保險庫的權限,方法是將其寫入存儲在保管庫中的備註上。無法進入保險庫,因爲您沒有說明您可以進入的註釋,並且因爲鎖定在裏面而無法獲取註釋。 – 2013-04-10 16:34:02

回答

2

我會嘗試打開你的訪問控制多一點,如果你要發送GET數據來回。同源規則可能非常挑剔。

Allow-Origin管理哪些服務器可以發出請求。

Max-Age實施到期。

Allow-Methods允許請求者發送GET/POST /等。數據給你。

下面是一個例子:

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Max-Age: 3628800'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); 

旁註當生產中的*增加了一些風險存在

允許來源應設置爲您的具體要求域。

請仔細研究您的輸入消毒,訪問這樣的文件是一件有風險的事情。你本質上是打開人們閱讀工作目錄中的任何文件。

$filepath = "/.../models/".$_GET["file"];

+0

我明白這些風險,但現在我只是需要它的工作。 反正我試圖將其添加到腳本,它仍然不起作用 – psychok7 2013-04-10 16:42:48

+0

系統上的任何文件,實際上,不只是當前目錄中的文件。考慮'file = ../../../../etc/passwd'! – duskwuff 2013-04-10 17:03:44

+0

我認爲你的答案開始工作...儘管我沒有改變任何東西...我會繼續測試更多,並將你的答案標記爲正確答案 – psychok7 2013-04-11 14:01:55

0

這是客戶端「問題」。這是一個由瀏覽器實施的禁止從一個域到另一個域的請求的安全問題。有一些解決方法,特別是JSONP。

+0

我以前工作過,雖然我沒有寫另一個腳本。問題是,我無意中刪除了它,現在我正試圖重寫它.. – psychok7 2013-04-10 16:43:46

+0

有一個使用jQuery。 http://www.jquery4u.com/json/jsonp-examples/ – Jonathon 2013-04-11 08:14:53

+0

我需要返回的內容包括圖像和XML。我可以使用jsonP來獲取xml內容嗎? – psychok7 2013-04-11 10:55:22

相關問題