Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅允许通过移动应用程序和我的域访问REST API_Php_Api_Rest - Fatal编程技术网

Php 仅允许通过移动应用程序和我的域访问REST API

Php 仅允许通过移动应用程序和我的域访问REST API,php,api,rest,Php,Api,Rest,我在API.xyz.com上部署了一些REST API,现在我想允许通过授权的移动设备和仅我的域xyz.com访问所有API 如果我将allow origin Header设置为我的站点,则API将停止响应移动设备。如果可能,请提出建议 另外,当我尝试在REST API调用中获取消费者IP地址时,它总是返回$_server[REMOTE_ADDR]中的API服务器公共IP,而不是客户端IP地址。我也尝试获取消费者IP地址,但没有成功 $ipaddress = '';

我在API.xyz.com上部署了一些REST API,现在我想允许通过授权的移动设备和仅我的域xyz.com访问所有API

如果我将allow origin Header设置为我的站点,则API将停止响应移动设备。如果可能,请提出建议

另外,当我尝试在REST API调用中获取消费者IP地址时,它总是返回$_server[REMOTE_ADDR]中的API服务器公共IP,而不是客户端IP地址。我也尝试获取消费者IP地址,但没有成功

        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP')) {
            $ipaddress = getenv('HTTP_CLIENT_IP');
        } else if (getenv('HTTP_X_FORWARDED_FOR')) {
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
            if (strpos($ipaddress, ',') > 0) {
                $addr = explode(",", $ipaddress);
                $ipaddress = trim($addr[0]);
            }
        } else if (getenv('HTTP_X_FORWARDED')) {
            $ipaddress = getenv('HTTP_X_FORWARDED');
        } else if (getenv('HTTP_FORWARDED_FOR')) {
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        } else if (getenv('HTTP_FORWARDED')) {
            $ipaddress = getenv('HTTP_FORWARDED');
        } else if (getenv('REMOTE_ADDR')) {
            $ipaddress = getenv('REMOTE_ADDR');
        } else {
            $ipaddress = 'UNKNOWN';
        }
请建议为什么它总是给我的服务器公共IP,即使我通过我的机器点击api


谢谢

我建议通过访问令牌保护您的REST API。我刚刚为我创建的RESTAPI做了类似的事情。有很多关于“安全RESTAPI”的优秀文章。下面是我发现特别有用的一个链接。我强烈建议使用HTTPS来帮助保护您的API


我建议通过访问令牌保护REST API。我刚刚为我创建的RESTAPI做了类似的事情。有很多关于“安全RESTAPI”的优秀文章。下面是我发现特别有用的一个链接。我强烈建议使用HTTPS来帮助保护您的API


这是您通常检查真实访客IP的方式:

if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
 //check for ip from share internet
 $ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
 // Check for the Proxy User
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
 $ip = $_SERVER["REMOTE_ADDR"];
}

// This will print user's real IP Address
// does't matter if user using proxy or not.
echo $ip;

这可能会派上用场

这是您通常检查真实访客IP的方式:

if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
 //check for ip from share internet
 $ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
 // Check for the Proxy User
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
 $ip = $_SERVER["REMOTE_ADDR"];
}

// This will print user's real IP Address
// does't matter if user using proxy or not.
echo $ip;

这可能会派上用场

当然,方法是创建令牌,会话令牌或访问令牌。我们专门将会话令牌与WealthEngineAPI()一起使用,以便它们超时。在最近的一次API活动中,来自ProgrammableWeb的David演示了在Android平台上嗅探移动应用程序中的令牌和秘密是多么容易。这正是您希望这些令牌过期的原因。

当然要做的是创建令牌,会话令牌或访问令牌。我们专门将会话令牌与WealthEngineAPI()一起使用,以便它们超时。在最近的一次API活动中,来自ProgrammableWeb的David演示了在Android平台上嗅探移动应用程序中的令牌和秘密是多么容易。这正是您希望这些令牌过期的原因。

您总是无法获得用户的实际ip地址,尤其是如果它是移动设备。它们几乎总是在NAT网关后面,你只能得到网关的IP。你总是无法得到用户的实际IP地址,特别是如果它是移动设备的话。这些几乎总是在NAT网关后面,您将获得的唯一IP是网关的。我尝试在我的API域上设置标头(“访问控制允许来源:”),但当我从其他来源点击并返回响应时,它仍然允许。为什么在我只允许示例时它不阻止其他来源。comI尝试设置标头(“访问控制允许我的API域上的源代码:),但当我从其他源代码点击并返回响应时,它仍然允许。我只允许example.com,为什么不阻止其他来源