1

我正在将我们的系统迁移到 Google App Engine。

当我们的 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 ) 发出请求。这在内部请求时是否相同。

问候,亨德里克

4

1 回答 1

2

我不认为 AppEngine 公开 IP 地址。AppEngine 是一个动态环境,实例旋转和旋转,随着事情的变化,会有来自不同 IP 的请求。

当您从 AppEngine 发出 HTTP 请求时,它会设置一些标头字段来标记请求来自 AppEngine。我认为 AppId 包括在内。无论如何,这里是关于那个的文档。

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

从安全的角度来看,任何人都可以编写虚假的 HTTP 标头。所以我不会依赖它作为身份验证的手段。

于 2013-07-11T19:30:07.440 回答