2013-07-11 166 views
1

我正在將我們的系統遷移到Google App Engine。Google App Engine服務器IP地址

當我們的PDF生成器需要外部資源(例如圖片)時,它執行內部HTTP請求(請求IP與用戶IP不同)。然後它也啓動一個不同的會話,所以我看不到用戶是否登錄。 爲了給予正確的權限,我需要檢查請求是否來自服務器IP。

在上面的代碼我檢查這個槽下面的代碼:

if($_SERVER['REMOTE_ADDR'] == $_SERVER['SERVER_ADDR']) { 
    return true; 
} 

但由於$ _ SERVER [「SERVER_ADDR」]不可用,這不能使用。

在新的代碼,我檢查這個槽下面的代碼:

$allowed_ips = array(
    '127.0.0.1', 
    '8.35.201.100' 
); 

if(in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) { return true; } 

的問題是;我不知道Google App Engine使用哪個IP地址執行內部請求。 我發現IP地址爲8.35.201.100作爲服務器地址,但是有更多的IP地址或可能的範圍。

任務隊列Google App Engine發出來自IP地址0.1.0.2(https://developers.google.com/appengine/docs/php/taskqueue/overview-push#Task_Execution)的請求。內部請求是否一樣?

映入眼簾,亨德里克

+0

你可以使用請求標題而不是IP地址,標題告訴你這個請求來自appengine,它也告訴你appengine appID,所以你可以識別你自己的appengine應用程序 –

+0

如何獲得這個請求標題?我嘗試了幾種方法($ _SERVER,getallheaders()),但沒有人給我請求源和appID – Hendrik

回答

2

我不認爲AppEngine上公開IP地址。 AppEngine是一個動態的環境,其實例在不斷旋轉和旋轉,隨着事情的變化,會有不同的IP請求。

當您從AppEngine發出HTTP請求時,它會設置一些標頭字段來標記請求來自AppEngine。我認爲AppId是包含的。無論如何,這裏是文檔。

https://developers.google.com/appengine/docs/php/urlfetch/#Request_Headers

從安全角度來看,任何人都可以隨便寫假的HTTP標頭。所以我不會依賴它作爲認證的手段。