如何从客户端而不是从服务器或我的 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。