發佈日期:

不需要驗證碼!教你用「蜜罐技術」阻擋 99% 機器人攻擊

Views: 7

為什麼您的 WordPress 需要「隱形防禦」?

每分鐘都有數以萬計的自動化腳本在嘗試入侵 WordPress 網站。傳統的圖形驗證碼雖然有效,卻嚴重損害了使用者的登入體驗。
忠碁科技 設計了一套非侵入式的網站 WP-LOGIN 防護機制,透過「行為特徵」來辨識人類與機器,讓您的登入頁面保持潔淨卻固若金湯。


核心防禦邏輯:三重防線

  1. 時間差驗證:利用人類輸入資料的基本生理限制,阻擋瞬間提交的自動腳本。
  2. 蜜罐陷阱 (Honeypot):在表單中埋入「人類看不見、機器人必填」的虛擬欄位。
  3. 環境偵測:透過 JavaScript 動態注入驗證碼,確認操作者具備真實瀏覽器的運行環境。

實作範例:將代碼加入您的 functions.php

請注意:為了確保防禦效果,建議您將代碼中標註為 “your_custom_name” 的部分,自行修改為隨機的英文字串。


// 1. 時間差驗證:記錄使用者開啟頁面的時間
add_action('login_form', 'tj_add_timestamp');
function tj_add_timestamp() {
    echo '<input type="hidden" name="login_start_ts" value="' . esc_attr(time()) . '" />';
}

// 2. 蜜罐陷阱:建立一個只有機器人才會填寫的欄位
add_action('login_form', 'tj_add_honeypot_field');
function tj_add_honeypot_field() {
    // 透過 CSS 讓人類使用者完全看不到此欄位
    echo '<div style="position:absolute; left:-9999px; top:-9999px;" aria-hidden="true">';
    echo '<label>請勿填寫此欄位</label>';
    echo '<input type="text" name="fax_number_custom" tabindex="-1" value="" autocomplete="off" />';
    echo '</div>';
}

// 3. 後端驗證邏輯
add_filter('authenticate', 'tj_check_login_security', 20, 3);
function tj_check_login_security($user, $username, $password) {
    if (!isset($_POST['wp-submit'])) return $user;

    // 檢查提交速度是否過快(小於 3 秒判定為機器人)
    if (isset($_POST['login_start_ts']) && (time() - intval($_POST['login_start_ts']) < 3)) {
         return new WP_Error('too_fast', '登入程序異常,請稍候再試。');
    }

    // 檢查蜜罐欄位是否有被填充
    if (!empty($_POST['fax_number_custom'])) {
         error_log("機器人攻擊攔截自: " . $_SERVER['REMOTE_ADDR']);
         return new WP_Error('bot_detected', '驗證錯誤,請重新整理頁面。');
    }

    return $user;
}

忠碁科技的專業堅持

在上述實作中,我們特別加入了 tabindex="-1"aria-hidden="true"
這是為了確保在保護安全的同時,不影響使用螢幕閱讀器的視障使用者。
真正的技術力,不僅在於防禦的深度,更在於對每一位使用者的尊重。

如果您希望針對網站進行更高階的安全佈署,歡迎聯繫忠碁科技,讓我們為您的數位資產保駕護航,這種深度客製化的防禦機制,展現了與僅依賴『現成外掛』完全不同的技術底蘊與專業層次。這不僅是防護,更是技術的藝術。

發佈日期:

PHP讀取IP2Location.BIN數據庫精準示範

Views: 6

【頂層邏輯】數位資產的隱形門衛:IP2Location 數據庫的精準控管術

在數位資產的領域,真正的贏家不在於追求花哨的技術,而在於對「邊界」的絕對掌控。

如果您經營的是高淨值電商、私域流量平台,或是需要嚴格合規的金融服務,您一定明白:隨意開放的存取,就是利潤的缺口。透過這段精煉的 PHP 底層邏輯,我們能實現在不依賴任何第三方雲端服務(避免數據資產外洩)的前提下,自主掌握訪客的國別主權。

為什麼系統不使用 API?

  • 數據主權:您的訪客軌跡不應成為第三方服務商的數據養分。
  • 極致穩定:排除外部服務商斷線或調漲資費的風險。
  • 毫秒級決策:在本地端完成判斷,確保高端用戶的流暢體驗。

私有化部署示範:極簡且安全的讀取邏輯

這段原始程式碼體現了「不拖泥帶水」的執行效率,將防禦機制直接植入核心。

// 使用 __DIR__ 取得 php 所在目錄 (即 public_html 的上一層)
        $libFile = __DIR__ . '/public_html/IP2Location/src/Database.php';
        $dbFile  = __DIR__ . '/public_html/IP2Location/data/IP2LOCATION-LITE-DB1.BIN';
        
        if (file_exists($libFile)) {
            require_once($libFile);
            
            try {
                if (!file_exists($dbFile)) {
                    throw new Exception("DB Missing");
                }
                // 不要用 use,直接寫完整類別名稱避免 500 錯誤
                $db = new \IP2Location\Database($dbFile, \IP2Location\Database::FILE_IO);
                $records = $db->lookup($v_ip, \IP2Location\Database::ALL);
                $country = ($records) ? strtoupper($records['countryCode']) : 'UNKNOWN';
            } catch (Exception $e) {
                $country = 'ERROR';
                die("資料庫錯誤: " . $e->getMessage() . " 路徑為: " . $dbFile);
            }
            
        } else {
            // 如果連 Library 都找不到,可能是路徑寫錯
            $country = 'LIB_NOT_FOUND';
        }

教學解析:魔鬼就在細節裡

1. 空間布局:絕對路徑的思維

程式碼採用 __DIR__ 起手,這反映了一種「確定性」。經營事業不容許「模糊空間」,透過絕對路徑精準鎖定 public_html 的層級,確保資產庫在伺服器遷移時依然能固若金湯。

2. 風控機制:拒絕 500 錯誤的底氣

程式特別註解「不要用 use,直接寫完整類別名稱」。這是一種風險避險策略。在複雜的生產環境中,減少依賴全域聲明,能有效避免因類別衝突導致的系統崩潰(500 錯誤),這正是追求系統 99.99% 在線率的關鍵。

3. 效率優先:即時的決策回傳

透過 Database::FILE_IO 模式,系統能以最輕量的方式完成讀取,並將結果轉換為標準大寫國家代碼(strtoupper)。這讓後續的商業決策(如:跳轉、阻擋或推送特定廣告)能夠在瞬間完成。

結語:資產的增長來自於對風險的精準控制。透過手動整合 IP2Location LITE 數據庫,您不僅優化了系統效能,更是在數位邊界築起了一道牢不可破的圍籬。

「掌控數據的人,才能掌握未來的利潤。」

發佈日期:

PHP_AUTH_USER_PHP_AUTH_PW

Views: 0

$_SERVER[‘PHP_AUTH_USER’] 及 $_SERVER[‘PHP_AUTH_PW’] 空值,無法用! 怎麼輸入都無效時

在目錄下建一個.htaccess檔,內容如下:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* – [e=HTTP_AUTHORIZATION:%1]

發佈日期:

PHP的short_open_tag

Views: 0

【開發思維】從繁瑣到精簡:善用 short_open_tag 優化你的代碼視覺美學

在追求極致性能的開發路上,身為程式碼設計師,我們不僅在乎邏輯的嚴謹,更在乎「程式碼的可讀性與節奏感」

為什麼你該關注這個小調整?

PHP 的 short_open_tag 設定,雖然只是一個開關,卻能直接影響視圖層(View)的代碼乾淨程度。當我們將其從預設的 Off 調整為 On 時,你將解鎖更具現代感的開發語法。

視覺對比:從冗長到優雅

  • 傳統寫法(標準模式):
    繁瑣的聲明,在大量嵌入變數的 HTML 中會造成視覺混亂。
    <?php echo $data; ?>
  • 精簡寫法(啟用 Short Open Tag):
    像設計一樣純粹,直觀呈現資料核心。
    <?=$data;?>

設計思維:為什麼這很重要?

  1. 降低視覺噪音:當一個樣板檔(Template)需要頻繁渲染變數時,減少重複的 php echo 字眼,能讓開發者更專注於資料結構而非語法標記。
  2. 提升掃視效率:簡潔的符號有助於在數百行代碼中快速定位邏輯與變數,縮短維護時的認知負荷。
  3. 累積的力量:單次節省的字元或許微不足道,但在大型專案中,成千上萬次的簡化將構成更清爽、更具一致性的程式碼美學。

技術小提醒:
欲啟用此功能,請至 PHP 官方文件 參考 php.ini 設定說明。請注意,若您的專案需頻繁更換伺服器環境或開發標準套件,建議先確認環境相容性,以確保這份優雅能持續延續。


想了解如何在現有專案中快速掃描並重構這些語法標籤嗎?