我正在将我们的系统迁移到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)发出请求。内部请求是否相同。
Greets,Hendrik
答案 0 :(得分:2)
我不认为AppEngine会公开IP地址。 AppEngine是一个动态环境,实例正在旋转和旋转,随着事情的变化会有来自不同IP的请求。
当您从AppEngine发出HTTP请求时,它会设置一些标题字段以标记该请求来自AppEngine。我认为AppId包含在内。无论如何这里是关于它的文件。
https://developers.google.com/appengine/docs/php/urlfetch/#Request_Headers
从安全角度来看,任何人都可以编写虚假的HTTP标头。所以我不会依赖它作为身份验证的手段。