如何从客户端而不是从服务器或我的 Web 应用程序获取数据?
How to get data from the client and not from the server or my web application?
我正在尝试获取不是来自我的服务器的用户数据。
我有两页,一页有 SSL 证书,另一页没有,我正在从我的计算机打印数据,在 SSL 证书上,它打印端口 443,而没有证书的打印端口80.
$PORT = $_SERVER['SERVER_PORT'];
同样适用于以下代码,在 SSL 中它打印代理,而在另一个中它不打印代理。
if(!gethostbyaddr(getenv('REMOTE_ADDR'))
|| gethostbyaddr(getenv('REMOTE_ADDR')) == "."
|| !getenv('HTTP_ACCEPT_ENCODING')
|| getenv('HTTP_X_FORWARDED_FOR')
|| getenv('HTTP_X_FORWARDED')
|| getenv('HTTP_FORWARDED_FOR')
|| getenv('HTTP_VIA')
|| getenv('HTTP_FORWARDED')
|| getenv('HTTP_CLIENT_IP')
|| getenv('HTTP_FORWARDED_FOR_IP')
|| getenv('VIA')
|| getenv('X-PROXY-ID')
|| getenv('MT-PROXY-ID')
|| getenv('X-TINYPROXY')
|| getenv('PROXY-AGENT')
|| getenv('X_FORWARDED_FOR')
|| getenv('FORWARDED_FOR')
|| getenv('X_FORWARDED FORWARDED')
|| getenv('HTTP_X_CLUSTER_CLIENT_IP')
|| getenv('CLIENT-IP')
|| getenv('CLIENT_IP')
|| getenv('FORWARDED_FOR_IP')
|| getenv('HTTP_PROXY_CONNECTION')
|| getenv('PROXY_CONNECTION')
|| in_array(getenv('REMOTE_PORT'), array(8080,80,6588,8000,3128,553,554))
|| @fsockopen(getenv('REMOTE_ADDR'), 80, $NUM_ERROR, $CONNECTION_TIME, 0)
|| !getenv('HTTP_CONNECTION')){
echo 'proxy';
} else {
echo 'no proxy';
}
所以这是错误的,因为我得到不同的数据,我使用的是同一台计算机吗?
Only on the page without certificate, it detects me when I use a VPN
app
当代理连接到加密的网络服务器 (SSL) 时,它无法修改 headers 它是用户发送到最终服务器的,因为所有数据都是加密的。
但是,如果代理连接到未加密的网络服务器,它将添加自己的 headers,例如 HTTP_FORWARDED_FOR
这就是您在非加密网络服务器上检测到代理的原因,因为这 25 种情况中有 1 种情况使代理陷入困境!
这就是为什么在加密的网络服务器上检测代理很难,你必须做更复杂的方法,比如尝试 port-scan 客户端 IP 并检查如果任何 common/standard 代理端口打开。
您可以通过在您的代码中执行 var_dump($_SERVER)
来确认这一点,您将看到在使用 SSL 的页面上根本没有代理 headers,而在没有使用 SSL 的页面中我相信你会找到其中之一。
正如我在上一个问题中告诉您的那样,我建议使用 IP 信誉 API。
我正在尝试获取不是来自我的服务器的用户数据。
我有两页,一页有 SSL 证书,另一页没有,我正在从我的计算机打印数据,在 SSL 证书上,它打印端口 443,而没有证书的打印端口80.
$PORT = $_SERVER['SERVER_PORT'];
同样适用于以下代码,在 SSL 中它打印代理,而在另一个中它不打印代理。
if(!gethostbyaddr(getenv('REMOTE_ADDR'))
|| gethostbyaddr(getenv('REMOTE_ADDR')) == "."
|| !getenv('HTTP_ACCEPT_ENCODING')
|| getenv('HTTP_X_FORWARDED_FOR')
|| getenv('HTTP_X_FORWARDED')
|| getenv('HTTP_FORWARDED_FOR')
|| getenv('HTTP_VIA')
|| getenv('HTTP_FORWARDED')
|| getenv('HTTP_CLIENT_IP')
|| getenv('HTTP_FORWARDED_FOR_IP')
|| getenv('VIA')
|| getenv('X-PROXY-ID')
|| getenv('MT-PROXY-ID')
|| getenv('X-TINYPROXY')
|| getenv('PROXY-AGENT')
|| getenv('X_FORWARDED_FOR')
|| getenv('FORWARDED_FOR')
|| getenv('X_FORWARDED FORWARDED')
|| getenv('HTTP_X_CLUSTER_CLIENT_IP')
|| getenv('CLIENT-IP')
|| getenv('CLIENT_IP')
|| getenv('FORWARDED_FOR_IP')
|| getenv('HTTP_PROXY_CONNECTION')
|| getenv('PROXY_CONNECTION')
|| in_array(getenv('REMOTE_PORT'), array(8080,80,6588,8000,3128,553,554))
|| @fsockopen(getenv('REMOTE_ADDR'), 80, $NUM_ERROR, $CONNECTION_TIME, 0)
|| !getenv('HTTP_CONNECTION')){
echo 'proxy';
} else {
echo 'no proxy';
}
所以这是错误的,因为我得到不同的数据,我使用的是同一台计算机吗?
Only on the page without certificate, it detects me when I use a VPN app
当代理连接到加密的网络服务器 (SSL) 时,它无法修改 headers 它是用户发送到最终服务器的,因为所有数据都是加密的。
但是,如果代理连接到未加密的网络服务器,它将添加自己的 headers,例如 HTTP_FORWARDED_FOR
这就是您在非加密网络服务器上检测到代理的原因,因为这 25 种情况中有 1 种情况使代理陷入困境!
这就是为什么在加密的网络服务器上检测代理很难,你必须做更复杂的方法,比如尝试 port-scan 客户端 IP 并检查如果任何 common/standard 代理端口打开。
您可以通过在您的代码中执行 var_dump($_SERVER)
来确认这一点,您将看到在使用 SSL 的页面上根本没有代理 headers,而在没有使用 SSL 的页面中我相信你会找到其中之一。
正如我在上一个问题中告诉您的那样,我建议使用 IP 信誉 API。