- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
好的,我有一个小的身份验证问题。我的 Web 服务允许使用用户名和密码通过 HTTP 连接到我的 API,但此连接也可以限制为特定的 IP 地址。
这意味着 $_SERVER['REMOTE_ADDR']
可能不正确。我已经知道任何 IP 信息都不能真正被依赖——我有这个限制只是为了增加另一层安全性。
如果这是对我的网络服务器的请求的总体概述:
clientSERVER => clientPROXY => myPROXY => mySERVER
这意味着 mySERVER 显示 myPROXY 的 REMOTE_ADDR
而不是客户端的,并将客户端的实际 IP 作为 HTTP_X_FORWARDED_FOR
发送。
为了克服这个问题,我的 Web 服务有一个“受信任的代理”IP 地址列表,如果 REMOTE_ADDR
来自这些受信任的 IP 地址之一,那么它会告诉我的 Web 服务实际的 IP 地址是 HTTP_X_FORWARDED_FOR
的值。
现在问题出在 clientPROXY 上。这意味着(经常)mySERVER 获得具有多个 IP 地址的 HTTP_X_FORWARDED_FOR
值。根据 HTTP_X_FORWARDED_FOR
文档,该值是以逗号分隔的 IP 地址列表,其中第一个 IP 是实际真实客户端的 IP 地址,其他每个 IP 地址都是代理的 IP 地址。
所以,如果 HTTP_X_FORWARDED_FOR
有多个值并且我的服务受 IP 限制,我是否必须对照我允许的 IP 列表检查 HTTP_X_FORWARDED_FOR
的“最后一个”值,并且只需忽略实际的客户端IP?
我假设在一个系统中,我必须设置允许的 IP 地址列表,列入白名单的 IP 地址应该是代理的地址,而不是代理后面的 IP(因为它可能是一些本地主机 IP 和经常更换)。
HTTP_CLIENT_IP
呢?
最佳答案
您可以使用此函数获取正确的客户端 IP:
public function getClientIP(){
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER["REMOTE_ADDR"];
}else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER["HTTP_CLIENT_IP"];
}
return '';
}
关于php - 如何正确使用 HTTP_X_FORWARDED_FOR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11452938/
分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的。 一般朋友,都会看到如下通用获取IP地址方法。 复制代码 代码如下: function getIP(
好的,我有一个小的身份验证问题。我的 Web 服务允许使用用户名和密码通过 HTTP 连接到我的 API,但此连接也可以限制为特定的 IP 地址。 这意味着 $_SERVER['REMOTE_ADDR
我需要获取网站用户的ip地址,因为我需要根据国家/地区提供本地化的内容。 我有一个负载平衡服务器,因此我使用HTTP_X_FORWARDED_FOR来获取ip地址,这样就可以了,但是由于我为整个站点设
我想获取 ClientIPaddress,但是当我调用 Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 时,我总是得到 NULL。 检查完 Server
我在某处读到他们说当您想记录用户的 IP 时,HTTP_X_FORWARDED_FOR 不是受信任的变量,因为他们可以更改它。这是真的吗?以及如何? 最佳答案 正如答案 here 中指出的那样,HTT
1、没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没
我有这个代码块,我正在尝试为其编写测试: def get_client_ip(req): """ This is used to get the user's IP from the
我们有两个 Amazon EC2 实例,以及一个负载均衡器和一个 Django 应用程序。亚马逊表示,ELB 默认配置为将 X-Forwarded-For header 发送到 Django 应用程序
如果在其他地方已经回答了这个问题,我深表歉意,我找不到它。 在没有的情况下,我试图找到访问该站点的机器的原始 IP。 在我的基本理解中,变量 HTTP_X_FORWARDED_FOR 将显示用户的 I
这段代码是我写的 $ips = preg_split("/,/", $_SERVER["HTTP_X_FORWARDED_FOR"]); $ip = $ips[0]; if (
http_x_forwarded_for 安全吗? 在请求中,是否可以用fake ip修改http_x_forwarded_for? 黑客能做到吗? 最佳答案 is http_x_forwarded_
我一直在寻找一种方法来找到客户端的 IP 地址,并且我已经找到了这两个 HTTP header 。从我发现它们是同一件事,但 HTTP_X_FORWARDED_FOR 似乎使用更广泛。你们中有人知道有
我知道标题 HTTP_X_FORWARDED_FOR 是由代理服务器设置的,用于识别通过代理发出 HTTP 请求的主机的 ip 地址。我听说 header HTTP_CLIENT_IP 是出于类似目的
我在 Web 服务器中有一小段 PHP 代码。 PHP 代码仅记录使用此行发出请求的人员的 IP: $ip = !empty($_SERVER['HTTP_X_FORWARDED_FOR'])
我正在尝试创建一个 php 计数器,为了不计算同一访客的重复访问,我一直在考虑 saving the visitor's IP address into the database , 我应该转向 $_
我需要在 Request.ServerVariables 集合中设置 HTTP_X_FORWARDED_FOR 值。我正在尝试使用 Fiddler(参见 this article)。 所以我设置了一个
我收到通知:未定义索引:以下函数中的 HTTP_X_FORWARDED_FOR: function _ip( ) { return ( preg_match( "/^([d]{1,3}).([
我需要获取我的用户 IP 地址'。 我找到了这篇文章 How to get Client Ip Address in Laravel 5.1? 上面提到的文章使用了Request::ip(); 但是,
我正在用 C# 编写一个使用代理的应用程序。代理在 HTTP 请求期间发送 HTTP_X_FORWARDED_FOR,这是不受欢迎的行为。 我现在正在扩展 Interop.SHDocVw axWebB
我看到用于识别转发请求的 IP 地址的非 RFC“XFF”HTTP header 的各种拼写。这些不同的 header 名称之间是否存在差异:X-FORWARDED-FOR、X_FORWARDED_F
我是一名优秀的程序员,十分优秀!