繁体   English   中英

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

所以这是错误的,因为我得到不同的数据,我使用的是同一台计算机吗?

仅在没有证书的页面上,当我使用 VPN 应用程序时它会检测到我

当代理连接到加密的网络服务器(SSL)时,它不能修改用户发送到最终服务器的标头,因为所有数据都是加密的。

但是,如果代理连接到未加密的网络服务器,它将添加自己的标头,例如HTTP_FORWARDED_FOR

这就是为什么您在未加密的网络服务器上检测到代理的原因,因为这 25 个条件中的 1 个已经捕获了代理!

这就是为什么在加密的网络服务器上检测代理很难的原因,您必须采取更复杂的方法,例如尝试对客户端 IP 进行端口扫描,并检查是否有任何通用/标准代理端口打开。

您可以通过在代码中执行var_dump($_SERVER)来确认这一点,您会看到在带有 SSL 的页面上,根本没有代理头,在没有 SSL 的页面上我相信您会找到其中一个他们。

正如我在上一个问题中告诉你的那样,我建议使用 IP 信誉 API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM