PHP 作為一門功能豐富的腳本語言,提供了大量內建函數讓開發者輕鬆實現各類功能。其中,fopen() 函數支援遠程文件操作,雖然方便,但若使用不當極易演變成安全漏洞。
以下代碼示範了如何使用 fopen() 讀取遠程資源:
<?php
$fp = @fopen($url, "r") or die("cannot open $url");
while ($line = @fgets($fp, 1024)) {
$contents .= $line;
}
echo $contents; // 顯示文件內容
fclose($fp); // 關閉文件
?>
將上述代碼儲存為 proxy.php,並請求 /proxy.php?url=https://www.example.com/,伺服器將代為獲取目標頁面內容並顯示。此時,目標網站記錄到的 IP 將是執行腳本的伺服器 IP,而非訪客真實 IP。
PHP 多數文件處理函數(如 file_get_contents、include、require)對遠程 URL 均保持透明。攻擊者可構造請求如 /proxy.php?url=https://target/script/.. 來探測或讀取敏感文件,甚至結合其他漏洞進一步滲透。
php.ini 中設定 allow_url_fopen = Off 禁用遠程文件打開。開發者應認清便利性背後的風險,遵循「最小權限」原則,避免將危險函數直接暴露給用戶輸入。