![](/img/trans.png)
[英]How to make my PHP client be the only one that can get data from my PHP server
[英]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.