

<p>** 常用外掛操作列表 ** - 作者常用外掛安裝、啟用批次操作區域。</p>
一介資男(Mxp.TW) 開發工具箱不是單一功能外掛,而是一個 WordPress 開發、維運、搬站與站點管理工具包。套件內含主要工具箱與四個可獨立啟用的子外掛,讓管理員只啟用目前站台需要的能力。
整套外掛最低支援 WordPress 5.5 與 PHP 7.4;各項第三方整合仍須同時符合該第三方外掛版本本身的最低環境需求。
Dev Tools - Mxp.TW:主要工具箱。提供外掛/主題安裝、打包、取代、資料庫維護、網站設定檢視與檔案異動檢查。Dev Tools: Snippets - Mxp.TW:常用維運片段。集中處理安全強化、登入/後台調整、媒體上傳政策、報告排程與網域到期檢查。Dev Tools: Site Manager - Mxp.TW:多站管理輔助。匯出/匯入站台資訊,並以 passkey、加密 token 與 HMAC 提供跨站快速登入。Dev Tools: Hide Login Page - Mxp.TW:登入路徑防護。將預設登入入口改為自訂路徑,並把原始登入與未登入後台入口導向 404。Dev Tools: Feedback Reporter - Mxp.TW:登入用戶全站問題回報。前台與後台可擷取目前頁面、錄製短片、標註截圖、填寫描述後由本站安全轉送 webhook。主要工具箱面向高權限管理員與開發者,功能集中在「安裝、搬站、檢查、替換」:
wp-content 或 wp-config.php 產生 ZIP 下載。wp-config.php 常數、使用者定義常數、.htaccess 與 .user.ini。phpinfo() 可用時顯示 PHP/主機設定。wp-content 打包。?debug 時,在 admin bar 顯示 hook 執行時間統計。Snippets 子外掛會直接接管多個 WordPress hook,適合用 wp-config.php 先定義 MDT_* 常數後再啟用。
script-src 等資源載入 CSP 不由此外掛預設接管。DISALLOW_FILE_MODS / DISALLOW_FILE_EDIT,並保護指定管理員不被一般後台列表、編輯、刪除或降權流程影響;WordPress 原生背景更新器只在 WP-Cron 的 wp_maybe_auto_update 執行期間取得窄範圍例外。MDT_LOGINPAGE_LOGO_URL;只接受不含帳密的 HTTP/HTTPS URL。中文網域、路徑、查詢與 fragment 會正規化為 Punycode/percent-encoding,既有 %XX 編碼不會重複處理。post 開放留言,page、附件、商品與其他自訂 post type 預設關閉;首次由管理員載入後台時,既有非白名單內容也會一次性關閉,但保留既有留言。home_url()、site_url()、多站、額外指定網域與 filter 網域的 RDAP/WHOIS 結果,包含到期日、註冊商、狀態、DNSSEC、Name Server、原始資料與通知狀態。MDT_ENABLE_CRON_AUTO_UPDATE:預設 true。即使 MDT_DISALLOW_FILE_MODS 啟用,也只在 WP-Cron 正在執行 WordPress 原生 wp_maybe_auto_update 時允許 automatic_updater context;離開該 call stack 後立即恢復封鎖。Core 是否更新仍遵守 WP_AUTO_UPDATE_CORE、auto_update_core_minor、版本分支、PHP/資料庫相容性、檔案系統與 VCS 檢查;外掛與佈景主題只更新已啟用自動更新的項目。設為 false 可取消此外掛提供的背景更新例外。Heartbeat 設定:
MDT_HEARTBEAT_INTERVAL:後台 Heartbeat 最短輪詢秒數,預設 60,只接受 15~120;超出範圍會回退為 60。WordPress 6.0 以上使用 Core 原生 minimalInterval,WordPress 5.5~5.9 避開舊版毫秒換算錯誤並以前端 interval guard 提供相同行為。設定值不應超過 120 秒,避免逼近 Core 150 秒文章/WooCommerce 訂單鎖的失效窗口。MDT_DISABLE_FRONTEND_HEARTBEAT:預設 true,會在公開前台 deregister Core heartbeat script handle,包含第三方外掛 enqueue 的同一 handle。若前台會員、協作或即時狀態功能明確依賴 Heartbeat,請在 wp-config.php 設為 false。此外設定不攔截 admin-ajax.php,因為已登入前台與後台 Heartbeat 共用同一個 authenticated AJAX action,伺服器端無法可靠區分來源而不誤傷後台。Security Monitor 設定與行為:
MDT_ENABLE_SECURITY_MONITOR:預設 true。設為 false 會停止事件 hook 與排程,但不刪除既有紀錄。MDT_SECURITY_NOTIFICATION_EMAIL:主要通知收件人;空字串時使用該站 admin_email。每封通知還會合併 MDT_DISALLOW_FILE_MODS_ADMINS 內有效使用者的 email 並去重;未自行指定該常數時,MDT 預設會由目前管理員與多站 Super Admin 建立名單,若在 wp-config.php 明確限制名單,其他管理員不會自動加入。通知採純文字分區格式,以中文顯示事件名稱、網站時區、異常檔案與處理建議,不再直接輸出內部 JSON。mxp_security_notification_email 可調整主要地址,mxp_security_notification_recipients 可調整最終地址陣列,另有 subject/message filters。MDT_SECURITY_RETENTION_DAYS:資安事件預設保留 360 天;登入聚合 bucket 只保留 24 小時。每個帳號另以 HMAC IP identity 保存最多 5 個成功登入來源摘要,用於 360 天內的新/曾見來源判斷;超出判斷視窗的摘要會在該帳號下次成功登入時清除,user meta 不保存原始 IP。每日排程以有上限的批次清理事件資料,停用外掛不刪除資料,移除整套外掛時才清除資料表、來源摘要與狀態。login/woocommerce_login challenge;warning 為 20 bits、high 為 22 bits,其他表單與未命中風險的正常登入維持 MDT_HONEYPOT_POW_DIFFICULTY。不使用 sleep()、永久鎖帳號或單純 IP block,風險在 10~15 分鐘後自動失效。MDT_SECURITY_IP_INTELLIGENCE:預設 true;MDT_SECURITY_IP_INTELLIGENCE_MODE 預設 local_with_remote_fallback。只有實際要寄資安通知且來源為公開 IP 時才查詢:先讀取站內 MMDB,取得國別、ASN 與網路組織;只有本機資料不存在、損壞或查無該 IP 時才以 HTTPS 呼叫 IPWhois.io。通知會明確標示本機資料或遠端備援。私有/保留 IP 不查詢,且所有 IP 情報都只作調查線索。sapics/ip-location-db 的 server-country.mmdb 與 origin-asn.mmdb(資料授權 PDDL-1.0),透過隨外掛封裝的 MaxMind DB Reader 1.14.0(Apache-2.0)讀取。啟用後 5~15 分鐘內排入首次背景下載;每日維護排程只檢查資料是否已滿 7 天,需更新時才下載。MDT_SECURITY_IP_DATABASE_UPDATE_INTERVAL 可在 1~30 天內調整,MDT_SECURITY_IP_DATABASE_TIMEOUT 預設 30 秒並限制在 5~60 秒。MDT_SECURITY_IP_INTELLIGENCE_MODE 可設為 local_with_remote_fallback、local_only、remote_only 或 disabled;local_only 永不把 IP 傳送給情報服務。mxp_security_ip_intelligence_mode、mxp_security_ip_database_directory 與 mxp_security_ip_database_assets filters 可供受控環境調整模式、儲存位置與來源。無效模式會安全回退到預設 local-first。MDT_SECURITY_IP_INTELLIGENCE_TIMEOUT/MDT_SECURITY_IP_INTELLIGENCE_CACHE_TTL:timeout 預設 1.0 秒並限制在 0.5~3.0 秒;成功結果快取至少 7 天、失敗 1 小時、限流 6 小時。IPWhois.io 會收到被查詢的公開 IP;mxp_security_ip_intelligence_url 可替換固定 HTTPS provider URL。查詢失敗時直接降級寄送原始事件。MDT_SECURITY_CORE_CHECKSUM:預設 true。每日以 WordPress.org checksum API 啟動,單批最多 200 個檔案或 8 MiB,透過單次排程續跑,不在一般前台請求同步掃描;Core 更新完成後延遲 10 分鐘重查。檔案比對由 MDT 內建 PHP 驗證器執行,不需要主機安裝 WP-CLI;通知的「事件觸發環境」只表示該次事件由 WP-Cron、WP-CLI 排程或網站請求中的哪一種環境建立。只在結果 fingerprint 改變時通知,恢復正常時通知一次,API 連續失敗 3 次才發操作警告。若停用訪客觸發的 WP-Cron,主機仍須以 system cron 定期呼叫 wp-cron.php。wp-content,檢查已知 Core 檔案的遺失/修改,並找出 wp-admin、wp-includes 額外 PHP;當 MDT_DELETE_XMLRPC_PHP/MDT_DELETE_INSTALL_PHP 啟用時,對應檔案遺失視為 MDT 預期狀態,檔案若仍存在且 checksum 正確也不會被誤判成額外 PHP,只有存在但內容遭修改才會通報。通知中的 wp core verify-checksums 只是不影響自動偵測的選用人工複核方式。MDT_SECURITY_TRUST_PROXY_HEADERS:預設 true,但只有 REMOTE_ADDR 位於內建/快取的 Cloudflare 官方 CIDR 或明確加入的可信代理 CIDR 時才解析轉送鏈;CF-Connecting-IP 與 CF-IPCountry 只在直接來源是 Cloudflare 時採信。MDT_SECURITY_ADDITIONAL_TRUSTED_PROXY_CIDRS:自家 Load Balancer/reverse proxy 的單一 CIDR、逗號字串或陣列。mxp_security_trusted_proxy_cidrs filter 可調整最終清單;不可把不受控的公開網段列為可信代理。MDT_SECURITY_CLOUDFLARE_IPS_AUTO_UPDATE/MDT_SECURITY_CLOUDFLARE_IPS_CACHE_TTL:預設自動更新 Cloudflare 官方 CIDR,快取 7 天;下載失敗保留上一份有效清單或內建 fallback,不在登入請求即時抓取網路資料。安全標頭設定:
MDT_ENABLE_SECURITY_HEADERS:預設 true。控制 Snippets 對 WordPress 動態前台回應加入的安全標頭與同源 frame 防護;設為 false 不會移除 nginx、Apache、Load Balancer 或 CDN 在 WordPress 外層設定的標頭。登入後跳轉設定:
MDT_ENABLE_LOGIN_REDIRECT:預設 true。登入請求帶有 WordPress 驗證通過的明確 redirect_to 時優先返回該位置;未指定時,editor、administrator、author、shop_manager 會前往後台,其他角色沿用 WordPress 原始目的地。設為 false 時完全交回 WordPress 處理。mxp_dev_admin_roles filter:調整未指定 redirect_to 時要導向後台的角色清單。留言開關政策:
MDT_ENABLE_COMMENT_DEFAULT_CLOSED:預設 true。設為 false 時不改寫新內容預設值、不執行一次性遷移,也不攔截既有項目的留言狀態;若先前已完成遷移,停用功能不會自動還原已儲存的 comment_status。MDT_COMMENT_DEFAULT_OPEN_POST_TYPES:新內容預設開放留言的 post type,預設為 array('post')。可在外掛載入前以 wp-config.php 常數替換完整陣列,或使用 mxp_dev_comment_default_open_post_types filter 調整。manage_options 權限的管理員首次載入該站後台時,會把既有且不在白名單內的 comment_status=open 一次性改為 closed;既有留言與 ping_status 不變。多站環境各站分別執行。Honeypot 常用設定與行為:
MDT_ENABLE_LOGIN_BOT_FUCKOFF:預設 true。保護 WordPress 登入、註冊、忘記密碼、重設密碼、多站註冊及文章密碼表單。MDT_ENABLE_COMMENT_SPAM_FUCKOFF:預設 true。保護 WordPress 標準留言與附件留言。MDT_ENABLE_WOOCOMMERCE_HONEYPOT:預設 true。完整保護 WooCommerce My Account/Classic 登入、註冊、忘記密碼、重設密碼,以及 Classic 商品評論與 woocommerce/product-review-form block。標準 form hook/comment_form() 會正常注入;主題覆寫模板即使漏掉內部 hook,只要仍由 WooCommerce wc_get_template() 載入並保留原生提交欄位,也會由 template fallback 精準補入一次。未安裝 WooCommerce 時不會攔截一般請求;可在外掛載入前定義為 false 關閉整合。MDT_ENABLE_CONTACT_FORM_7_HONEYPOT:預設 true。保護 Contact Form 7 表單,challenge 綁定個別表單 ID,驗證失敗由 Contact Form 7 原生 spam 流程處理。未安裝 Contact Form 7 時不會攔截一般請求;可在外掛載入前定義為 false 關閉整合。MDT_HONEYPOT_MIN_SECONDS:challenge 簽發後最短可提交秒數,預設 2。MDT_HONEYPOT_POW_DIFFICULTY:所有受保護表單的 SHA-256 Hashcash 前導零位元難度,預設 18,有效範圍 8~24;每增加一位,平均求解量約加倍。實際時間依裝置與瀏覽器而異,無法保證固定秒數。MDT_HONEYPOT_POW_MAX_SECONDS:所有受保護表單的 PoW challenge 最長有效秒數,預設 60,有效範圍 3~300。FormData、等待 proof 完成,再恢復原生 submit event。計算期間提交按鈕會暫停並以 aria-busy/live status 表示;Worker、Web Crypto 或 challenge endpoint 失敗時保留表單內容並顯示錯誤,不會送出一個必定被後端拒絕的請求。no-store POST;前端不採用 HTML 內嵌 challenge,而會在求解前重新取得當下風險難度。token 無伺服器 session、資料表或 transient;頁面/CDN 快取、表單 reset 與 BFCache 還原都不會把舊難度固定給後續訪客或放寬後端驗證。完全相同 payload/proof 在有效期內仍可重送,登入節流、留言去重與其他業務限制仍由 WordPress/整合外掛處理。admin-ajax.php?action=mxp_honeypot_token 的 POST 不被快取;舊版 v2/v3 token 與未載入新版 Worker 的表單會 fail closed。include 自製表單、移除 WooCommerce 原生 nonce/提交欄位、改走自訂 AJAX/REST endpoint,已脫離 WooCommerce template/hook 契約,無法安全推斷表單語意,必須另外使用對應的輸出與 server-side 驗證 hook 整合。WPForms,以及 WooCommerce Checkout Blocks/Store API 結帳建帳與 Order Confirmation 延後建帳,目前也不在保護範圍內。網域到期檢查常用設定:
MDT_DOMAIN_EXPIRY_CHECK:是否啟用網域到期檢查,預設 true。MDT_DOMAIN_EXPIRY_NOTICE_DAYS:到期通知門檻,預設 90, 60, 30, 14, 7, 3, 1 天。尚未到期會顯示剩餘天數與命中的門檻;今天到期與已過期改用獨立狀態,已過期會顯示逾期天數、緊急主旨與立即續約建議,不會再顯示負數天數或「到期前 1 天」。既有未到期門檻沿用原去重 key,避免只因信件改版重寄;已過期狀態只對同一到期時間通知一次。MDT_DOMAIN_EXPIRY_EXTRA_DOMAINS:額外指定檢查網域,支援陣列或逗號分隔字串。MDT_DOMAIN_EXPIRY_OBSERVE_HOSTS:是否自動記錄非設定來源的 HTTP_HOST,預設 false。MDT_DOMAIN_EXPIRY_OBSERVED_HOST_RETENTION_DAYS:觀察到的 HTTP_HOST 紀錄保留天數,預設 180。MDT_DOMAIN_EXPIRY_MAX_DOMAINS_PER_RUN:單次排程最多查詢數量,預設 20。MDT_DOMAIN_EXPIRY_STORE_RAW_DATA:是否儲存 RDAP/WHOIS 原始資料,預設 true。mxp_domain_expiry_notice_subject、mxp_domain_expiry_notice_message filters 可調整最終主旨與內容。Site Manager 用來把多個 WordPress 站台整理成一個維運主控台,同時保留既有匯出/匯入與快速登入流程。
mxp_dev_sites_info_db 站台選項;新版主控台會同步寫入 mxp_sm_sites、mxp_sm_site_credentials、mxp_sm_site_snapshots、mxp_sm_site_events、mxp_sm_site_jobs、mxp_sm_site_job_logs 等資料表。匯出的字串包含 passkey,等同可請求快速登入與配對 bootstrap 的高權限憑證。請只在可信任管理員與可信任傳輸渠道中保存或分享;若曾外洩,請立即重置站台密鑰、解除配對並重新匯出/配對。
Hide Login Page 沒有設定頁,透過常數控制:
MDT_LOGIN_PATH:預設 admin-staff,登入網址會變成 /admin-staff/;未啟用 pretty permalink 時使用 /?admin-staff。預設字串與外掛原始碼都是公開資訊,正式站必須在 WordPress 載入前定義每站不同且不可預測的值。MDT_LOGIN_PATH_DISPLAY:預設 true;設為 false 時可在外掛列表隱藏此子外掛。啟用後,wp-login.php、/login、wp-register、wp-activate 與非 multisite 的 wp-signup 會走 404 流程;未登入的 /wp-admin/ 請求也會被導到 /404。此外掛也會改寫 WordPress 產生的登入 URL、redirect URL、welcome email 中的登入連結,以及 WooCommerce 密碼重設連結。公開文章密碼表單會改用只接受 POST action=postpass 的原生處理入口,不再輸出自訂登入路徑。
登入路徑隱藏只能降低通用掃描雜訊,不是身分驗證或存取控制。若主題、區塊、小工具或第三方外掛刻意向匿名訪客輸出 wp_login_url()/註冊連結,自訂路徑仍會出現在公開 HTML;此需求與「路徑不可公開」互斥,應移除該公開登入元件,並另外啟用強密碼、MFA、速率限制與此外掛的登入 honeypot。
Feedback Reporter 沒有設定頁,透過 MDT_FEEDBACK_REPORTER_* 常數控制。啟用外掛後預設啟用回報功能;只允許登入並符合 role / user ID 規則的使用者在前台與後台看到回報入口。若要關閉,可在 wp-config.php 將 MDT_FEEDBACK_REPORTER_ENABLE 定義為 false。
ips-v4 / ips-v6 清單取得並快取可信 edge CIDR,抓取失敗時才回退到內建 Cloudflare 範圍;只有當 REMOTE_ADDR 落在可信代理 CIDR 內才讀取 CF-Connecting-IP、CF-Connecting-IPv6、True-Client-IP、X-Real-IP、Forwarded 或 X-Forwarded-For,避免直接打到 origin 的請求偽造 client IP header。若 origin 已由防火牆限制只能經 Cloudflare 進站,也仍建議保留此閘門作為防呆;不建議無條件信任 header。wp-content/uploads/mxp-dev-tools/feedback-reporter/,每次回報會寫入不可預測的隨機子目錄與隨機檔名;Apache/LiteSpeed 會透過 .htaccess 關閉目錄列表並拒絕 JSON log 直連,但允許圖片/影片媒體檔讓內部 webhook 連結可直接開啟,nginx 需由站台自行決定是否加上等效規則;再依保留天數與檔案數上限自動清理,移除 Feedback Reporter 子外掛時預設會刪除 log/截圖/錄影。常用常數:
MDT_FEEDBACK_REPORTER_ENABLE:是否啟用全站回報,預設 true;可設為 false 關閉。MDT_FEEDBACK_REPORTER_ADMIN_ENABLE:是否在 wp-admin 輸出低干擾後台回報入口,預設 true。MDT_FEEDBACK_REPORTER_ADMIN_BUTTON_MODE:後台入口樣式,預設 subtle-tab,另可用 compact-pill。MDT_FEEDBACK_REPORTER_WEBHOOK_URL:接收回報的 webhook URL;預設要求 HTTPS,未設定時仍可回報並保存本機 log/截圖/錄影,但不送出外部通知。MDT_FEEDBACK_REPORTER_WEBHOOK_FORMAT:webhook payload 格式,預設 auto;Discord 與 Slack incoming webhook URL 會自動送出相容格式,也可設為 generic、discord 或 slack。MDT_FEEDBACK_REPORTER_WEBHOOK_SECRET:webhook HMAC 簽章 secret,預設空字串。MDT_FEEDBACK_REPORTER_WEBHOOK_REQUIRE_HTTPS:是否要求 webhook URL 使用 HTTPS,預設 true;設為 false 時可接受 HTTP,但仍會拒絕 private/reserved IP。MDT_FEEDBACK_REPORTER_WEBHOOK_SSL_VERIFY:是否驗證 HTTPS 憑證,預設 true;設為 false 時可接受自簽憑證。MDT_FEEDBACK_REPORTER_ALLOWED_ROLES:允許回報的角色,預設 administrator。MDT_FEEDBACK_REPORTER_ALLOWED_USER_IDS:額外允許回報的使用者 ID。MDT_FEEDBACK_REPORTER_DENIED_USER_IDS:禁止回報的使用者 ID,優先權最高。MDT_FEEDBACK_REPORTER_DENIED_PATHS:不輸出回報入口的 path prefix,預設只排除 /wp-login.php。MDT_FEEDBACK_REPORTER_LOG_RETENTION_DAYS:本機 log/截圖/錄影保留天數,預設 30。MDT_FEEDBACK_REPORTER_MAX_LOG_FILES:本機 log/截圖/錄影檔案數上限,預設 500。MDT_FEEDBACK_REPORTER_TRUST_PROXY_HEADERS:是否在可信反向代理後方解析真實用戶 IP,預設 true。MDT_FEEDBACK_REPORTER_TRUSTED_PROXY_CIDRS:Cloudflare 官方清單抓取失敗時使用的 fallback Cloudflare 代理 CIDR;此閘門是為了防止繞過 CDN 直打 origin 時偽造 CF-Connecting-IP / X-Forwarded-For。MDT_FEEDBACK_REPORTER_ADDITIONAL_TRUSTED_PROXY_CIDRS:額外信任的自家 proxy / load balancer CIDR,會與 Cloudflare 官方清單合併;為相容舊設定,若 MDT_FEEDBACK_REPORTER_TRUSTED_PROXY_CIDRS 內含不屬於內建 Cloudflare fallback 的 CIDR,也會視為額外可信代理。MDT_FEEDBACK_REPORTER_CLOUDFLARE_IPS_AUTO_UPDATE:是否自動抓取 Cloudflare 官方 IP 清單更新可信代理 CIDR,預設 true。MDT_FEEDBACK_REPORTER_CLOUDFLARE_IPS_CACHE_TTL:Cloudflare IP 清單快取秒數,預設 7 天;抓取失敗時使用上一份有效 transient 或 MDT_FEEDBACK_REPORTER_TRUSTED_PROXY_CIDRS fallback。MDT_FEEDBACK_REPORTER_CLOUDFLARE_IPS_V4_URL / MDT_FEEDBACK_REPORTER_CLOUDFLARE_IPS_V6_URL:Cloudflare IP 文字清單來源,預設 https://www.cloudflare.com/ips-v4 與 https://www.cloudflare.com/ips-v6。MDT_FEEDBACK_REPORTER_MAX_VIDEO_SECONDS:錄影模式最長秒數,預設 60。MDT_FEEDBACK_REPORTER_MAX_VIDEO_BYTES:錄影檔案大小上限,預設 50 MiB。MDT_FEEDBACK_REPORTER_DELETE_LOGS_ON_UNINSTALL:移除 Feedback Reporter 子外掛時是否刪除 log/截圖/錄影,預設 true。wp-config.php、.htaccess、.user.ini、PHP 設定與資料庫資訊。ZipArchive、網路連線、檔案系統權限與主機 PHP 限制會影響打包、匯出、安裝、替換與前端回報轉送功能。