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

PHP 聊天室實作教學 (三):IP 封鎖機制、動態 IP 處理與用戶追蹤

     編輯:PHP 相關知識

聊天室管理功能進階:封鎖惡意用戶、應對動態 IP、記錄訪客身分

延續前兩部分,本文實作三大管理功能:基於 IP 的用戶封鎖、動態 IP 區段封鎖策略、IP 與暱稱對應記錄追蹤,完善聊天室的基本治理能力。

1. 基礎 IP 封鎖實作

<?php
// 讀取封鎖清單 (每行一個 IP)
$banned = file("banned.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$client_ip = $_SERVER['REMOTE_ADDR'];

foreach ($banned as $ban_ip) {
    if (trim($ban_ip) === $client_ip) {
        header("Content-Type: text/html; charset=utf-8");
        die('<font color="red" face="arial" align="center">您已被禁止使用本聊天室</font>');
    }
}
// 通過檢查,繼續處理發言邏輯...
?>

2. 動態 IP 區段封鎖策略

針對撥接/ADSL 動態 IP,封鎖前三段 (C 類網段) 而非單一 IP:

<?php
function getIPMask($ip) {
    $parts = explode('.', $ip);
    // 取前三段組成網段遮罩,如 192.168.1.xxx
    return implode('.', array_slice($parts, 0, 3));
}

$client_mask = getIPMask($_SERVER['REMOTE_ADDR']);

foreach ($banned as $ban_ip) {
    if (getIPMask(trim($ban_ip)) === $client_mask) {
        die('您所在的網段已被封鎖,無法使用聊天室');
    }
}
?>

策略權衡**:

策略精準度誤傷風險適用場景
單一 IP 封鎖高低固定 IP 惡意用戶、伺服器攻擊源
/24 網段封鎖 (前三段)中中 (可能波及同網段無辜用戶)動態 IP 重撥規避、特定 ISP 惡意群體
/16 網段封鎖 (前兩段)低高 (大範圍誤傷)極端情況:國家級封鎖、大型機房攻擊

3. 訪客 IP 與暱稱對應記錄 (iplist.html)

<?php
// 讀取現有記錄
$ip_records = file("iplist.html");
$old_ips = '';
for ($i = 1; $i < 20; $i++) { // 保留最新 19 筆
    if (isset($ip_records[$i])) $old_ips .= $ip_records[$i];
}

// 新記錄:使用表格結構方便管理員查看
$name = htmlspecialchars($_POST['name'] ?? '匿名');
$ip = $_SERVER['REMOTE_ADDR'];
$new_ip = "<tr><td>$name</td><td>$ip</td></tr>\n";

// 組裝完整 HTML (含表格標頭)
$header = '<html><body bgcolor="#000000" text="#ffffff">' .
    '<table border="1"><tr><th>暱稱</th><th>IP 位址</th></tr>';
$footer = '</table></body></html>';

// 寫入檔案
$fp = fopen("iplist.html", "w");
fwrite($fp, $header . "\n");
fwrite($fp, $old_ips);
fwrite($fp, $new_ip);
fwrite($fp, $footer);
fclose($fp);
?>

管理員秘密監控頁面

建立獨立隱藏 URL (如 admin_iplist.php3) 僅管理員知曉,直接 include iplist.html 即可即時監控發言者身分,發現冒名頂替 (同一 IP 使用多個暱稱) 等違規行為。

完整聊天室功能清單總結

  • ✅ 基礎發言/顯示/自動刷新 (第一部分)
  • ✅ 用戶暱稱輸入/訊息清洗
  • ✅ IP 單點封鎖
  • ✅ IP 網段封鎖 (動態 IP 應對)
  • ✅ 發言者 IP/暱稱記錄追蹤
  • ✅ 管理員隱藏監控介面

進階擴展建議 (留待讀者實作)

  1. 程式碼模組化:將重複的檔案讀寫、HTML 組裝封裝為函數/類別
  2. 自動封鎖腳本:管理員一鍵將指定 IP/暱稱加入 banned.txt
  3. URL/Email 自動連結化:使用 preg_replace 正則掃描訊息內容,轉換為可點擊連結
  4. 敏感詞過濾:載入關鍵字庫,發言前替換/攔截
  5. 資料庫遷移:檔案改為 MySQL 表,支援高併發、索引查詢、備份
  6. WebSocket 即時推送:替代 Meta Refresh,毫秒級延遲、雙向通訊

安全性補充提醒

⚠️ 檔案並發寫入競爭條件

多用戶同時發言時,fopen(..., "w") 會導致資料遺失。生產環境必須使用檔案鎖 flock() 或遷移至資料庫。

💡 IP 封鎖的現代替代方案

  • 用戶帳號體系 + 行為分析 (頻率限制、內容審核) 替代單純 IP 封鎖
  • Cloudflare / WAF 邊緣層封鎖惡意流量,不觸及應用層
  • 蜜罐機制誘捕爬蟲/惡意腳本,自動封鎖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved