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

PHP 聊天室開發實戰(三):IP 封鎖與動態 IP 防護機制

     編輯:PHP 相關知識

前言

本系列第三篇將介紹如何在 PHP 聊天室中實作使用者封鎖功能,並針對動態 IP 位址設計防護機制,最後補充記錄使用者 IP 的方法,以利管理員監控與識別冒名頂替者。

基本封鎖邏輯

利用 $REMOTE_ADDR 變數取得使用者 IP,透過陣列 $banned_array 儲存被封鎖的 IP 位址。在處理使用者發言前,先檢查該 IP 是否在封鎖清單中:

<?php
for ($counter = 0; $counter < sizeof($banned_array); $counter++) {
    if ($banned_array[$counter] == $REMOTE_ADDR) {
        print("You have been banned from this chat");
        exit;
    }
}
?>

exit 會立即終止腳本執行,確保被封鎖使用者無法使用聊天室。

動態 IP 防護:IP 區塊比對

許多使用者使用動態 IP,單一 IP 封鎖效果有限。解決方案是比對 IP 區塊(前三段),例如 192.168.1.xxx 整個 C 類網段。提供一個簡單函數產生 IP 遮罩:

<?php
function makeMask($ip) {
    $ip_array = explode(".", $ip);
    return "$ip_array[0].$ip_array[1].$ip_array[2]";
}
?>

修改檢查邏輯,改用遮罩比對:

<?php
for ($counter = 0; $counter < sizeof($banned_array); $counter++) {
    if (makeMask($REMOTE_ADDR) == makeMask($banned_array[$counter])) {
        print("You have been banned from this chat");
        exit;
    }
}
?>

如此即可封鎖整個 IP 區塊,大幅提升防護效果。

記錄使用者 IP 以利追蹤

為了讓管理員能監控線上使用者,將使用者暱稱 $name 與 $REMOTE_ADDR 寫入 iplist.html。原理與訊息記錄類似:讀取現有檔案,捨棄舊標頭與舊記錄,重新寫入新標頭、新記錄與新標尾,並使用表格排版以利閱讀。

<?php
$header = "<table>";
$footer = "</table>";
$new_ip = "<tr><td>$name</td><td>$REMOTE_ADDR</td></tr>";
$ip_array = file("iplist.html");
for ($counter = 1; $counter < 20; $counter++)
    $old_ips .= $ip_array[$counter];
?>

將整理後的內容寫回檔案,管理員即可透過隱藏網址查看 IP 列表,發現冒名頂替者。

延伸建議

  • 將常用程式碼封裝成函數,提高維護性。
  • 撰寫自動將惡意使用者加入封鎖清單的腳本。
  • 使用正規表達式掃描訊息中的 URL 與 Email,自動轉為超連結(類似 Outlook Express 或 ICQ)。

結語

嘗試實作、享受樂趣、累積經驗——這就是我開始 PHP 開發的方式,如今已以此為職業。祝大家聊天愉快!

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