簡體   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