2013-07-11 167 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标头。所以我不会依赖它作为认证的手段。