首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP cURL 偽造 IP 來源與 Referer 實戰

     編輯:PHP 綜合知識

偽造 HTTP_CLIENT_IP 與 X_FORWARDED_FOR

$ch = curl_init();
$url = "https://localhost/target_ip.php";
$header = array(
    'CLIENT-IP: 58.68.44.61',
    'X-FORWARDED-FOR: 58.68.44.61',
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page_content = curl_exec($ch);
curl_close($ch);
echo $page_content;

目標驗證腳本

<?php
echo getenv('HTTP_CLIENT_IP');
echo getenv('HTTP_X_FORWARDED_FOR');
echo getenv('REMOTE_ADDR');
?>

輸出:
58.68.44.61
58.68.44.61
127.0.0.1

偽造 Referer

curl_setopt($ch, CURLOPT_REFERER, "https://www.jb51.net/");

常見獲取 IP 函數防偽造

function getClientIp() {
    if (!empty($_SERVER["HTTP_CLIENT_IP"])) return $_SERVER["HTTP_CLIENT_IP"];
    if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) return $_SERVER["HTTP_X_FORWARDED_FOR"];
    return $_SERVER["REMOTE_ADDR"];
}

上述函數**極易被繞過**,因標頭完全可控。

安全建議

  • 不要單憑 X-Forwarded-For 做權限判斷。
  • 結合 REMOTE_ADDR(真實 TCP 連接 IP)與代理信任鏈驗證。
  • 使用 Nginx real_ip_module 從可信代理頭提取真實 IP。
  • 關鍵操作(投票、登錄)需結合驗證碼、頻率限制、設備指紋等多維防刷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved