DIGITAL PRODUCT

Discuz! 插件阿里雲ESA AI驗證碼

將阿里雲ESA AI驗證碼接入Discuz!, 為用戶註冊、登錄、找回密碼、發帖、回復及帖子點評等場景提供人機驗證,有效降低機器註冊、撞庫登錄和垃圾內容提交風險。

目前阿里雲ESA的AI驗證碼是免費提供
站長們可以享受阿里雲頂級免費風控防護能力
ESA的AI驗證碼免費期限以阿里雲官方公布為準

阿里雲ESA AI驗證碼插件通過Discuz! 原生插件接口,將阿里雲ESA AI驗證能力接入論壇常用業務場景,無需修改系統文件和模板文件。
插件支持嵌入式與彈出式兩種驗證方式,可根據論壇模板和使用場景靈活選擇。 驗證通過后自動繼續原有提交操作,盡量保持Discuz! 原生操作流程和頁面樣式。

主要功能:
-支持用戶註冊驗證
-支持普通登錄、頂部登錄及彈出層登錄驗證
-支持找回密碼驗證
-支持發表主題和快速發帖驗證
-支持發表回復和快速回復驗證
-支持帖子點評彈出層驗證
-支持嵌入式與彈出式驗證碼
-支持自定義嵌入式組件寬度
-支持設置彈出式驗證按鈕顏色
-支持開啟/關閉未驗證提示以及提示樣式和區域
-支持中國內地和新加坡驗證碼地域
-支持一次性通行票據及有效期控制
-支持ESA回源密鑰校驗,降低繞過ESA直接訪問源站的風險
-支持調試日誌,便於排查驗簽及提交問題
-支持Discuz! X3.4、X3.5和X5.0獨立兼容版本

安全說明
插件採用服務端驗簽和一次性通行票據機制。 驗證票據使用后立即失效,並受到有效期、會話及業務場景限制,減少重複使用和跨場景復用風險。
必須配合阿里雲ESA的空Token攔截規則與回源請求頭規則使用,並妥善保管回源密鑰。

使用前準備
使用本插件前,需要先在阿里雲ESA控制台創建AI驗證碼規則,並取得:
-ESA身份標
-ESA場景ID
-驗證碼地域
-回源密鑰(插件後台自帶生成地址)
啟用插件前,請關閉Discuz! 管理中心“安全→驗證設置”中的原生驗證碼功能,避免兩套驗證碼同時啟用產生衝突。

調試日誌
啟用調試日誌后,日誌保存在:
`source/plugin/fjxiaoyi_esacaptcha/data/log/`

日誌必須登錄網站服務器,通過寶塔文件管理器、SSH或其他服務器管理工具查看,插件後台不提供在線日誌查看功能。

調試日誌僅建議在排查問題時開啟,問題解決后請及時關閉。

兼容版本-Discuz! X3.4專用版本
-Discuz! X3.5專用版本
-Discuz! X5.0專用版本

請根據論壇實際版本選擇對應的插件分支安裝,不要跨版本混用。

免責聲明本插件為第三方開發插件,並非阿里雲官方產品。 使用本插件需要自行開通並正確配置阿里雲ESA AI驗證碼服務,相關服務能力、使用限制及費用以阿里雲官方說明為準。

-完成Discuz! X5.0適配,支持UTF8SC、UTF8TC編碼。
-優化PHP 8環境兼容性。
-修復觸屏版註冊、登錄及找回密碼頁面驗證碼圖片不顯示的問題。
-修復電腦版部分登錄、註冊及發帖頁面點擊驗證無響應的問題。
-修復驗證彈層關閉按鈕失效、彈層遮擋及移動端顯示超出邊界的問題。
-優化嵌入式驗證碼寬度及自適應布局。
-驗證通過后不再自動提交,由用戶確認后再次點擊業務按鈕提交。
-新增未驗證提交提示,覆蓋註冊、登錄、找回密碼、發表主題、發表回復及帖子點評。
-支持後台自定義提示開關、提示文字、顯示位置、顏色和樣式。
-優化驗證按鈕狀態,彈出驗證層時不再消失。
-驗證成功狀態精簡為“驗證通過”,避免在登錄浮層中顯示不完整。
-修復其他已知問題,提升電腦版和觸屏版的穩定性。

站點開通阿里雲EAS,請查看下發接入以及相關說明:

https://help.aliyun.com/zh/edge-security-acceleration/esa/getting-started/add-your-website-to-esa?spm=a2c4g.11186623.0.i1

目前阿里雲ESA有免費版,備案的域名支持全球免費CDN加速。 

相關站點解析等問題,如果您是新手,也可以通過阿里雲的工單諮詢在線客服。

當你配置完站點ESA解析后,可以按照下方步驟進行AI驗證碼的配置

第一步:在阿里雲ESA創建AI驗證碼規則

登錄阿里雲控制台,進入 「邊緣安全ESA」 後台。

在左側菜單中找到:

AI驗證碼→配置→新增規則

按照頁面提示創建一條新的AI驗證碼規則。

其中需要特別注意 「需驗簽的接口」 配置。

請先進入Discuz! 插件後台,複製插件提供的驗簽接口地址,然後填寫到阿里雲ESA後台對應位置。

插件驗簽接口為:

/plugin.php/fjxiaoyi_esacaptcha/verify

具體填寫方式請參考下圖。

重要:
規則保存后,系統會提示是否開啟 「攔截空Token」

這裏一定要選擇 開啟,否則可能導致驗證碼校驗失效或被繞過。

第二步:填寫場景ID和身份標識

AI驗證碼規則創建完成后,在阿里雲ESA後台找到對應規則。

複製以下兩個參數:

  • 場景ID
  • 身份標識

然後進入Discuz! 插件後台,將這兩個參數填寫到對應位置並保存。

填寫完成后,建議再次檢查阿里雲ESA後台:

「攔截空Token」必須保持開啟狀態。

具體位置請參考下圖。

第三步:創建ESA回源請求頭規則

進入阿里雲ESA後台:

站點管理→找到已經接入ESA的域名→點擊進入站點

在右側找到:

規則→輪換規則→修改請求頭

進入后,將作用方向選擇為:

ESA到源站

然後點擊:

新增規則

具體位置請參考下圖。

第四步:設置匹配條件

規則名稱可以自行填寫,例如:

小蟻ESA AI驗證碼回源驗證

規則內容選擇:

自定義規則

首先添加第一個條件:

URL路徑→等於→ /plugin.php/fjxiaoyi_esacaptcha/verify

然後點擊 「And」,繼續增加第二個條件:

主機名→等於→選擇您已經接入阿里雲ESA的站點域名

最終規則需要同時滿足兩個條件:

條件1:

URL路徑=/plugin.php/fjxiaoyi_esacaptcha/verify

並且

條件2:

主機名=您當前配置的ESA站點域名

具體配置方式請參考下圖。

第五步:添加回源安全請求頭

在規則下方的 「則執行」 區域中,按照下面的參數填寫:

類型: 靜態

操作方式: 添加

請求頭名稱:

X-Fjxiaoyi-ESA-Origin

請求頭值:

填寫一個隨機生成的32位字符串

例如:a8F3kL9mP2xT7qW4nR6yH1cV5sD0zB8e(這個是示例,千萬別用)

工具:點此進入32位隨機字符生成器

然後回到Discuz! 插件後台,在:

ESA回源密鑰

一欄中填寫完全相同的32位字符串

特別注意

阿里雲ESA中填寫的:

X-Fjxiaoyi-ESA-Origin

請求頭值,必須與插件後台的:

「ESA回源密鑰」

完全一致。

包括:

  • 字母大小寫
  • 數字
  • 字符順序

只要有一個字符不同,插件都可能無法正常完成回源驗證。

配置完成后請檢查

全部設置完成后,建議再次確認以下5項:

  1. 需驗簽接口已經填寫正確;
  2. 攔截空Token已經開啟;
  3. 場景ID已經正確填寫到插件後台;
  4. 身份標識已經正確填寫到插件後台;
  5. 阿里雲ESA的 X-Fjxiaoyi-ESA-Origin 請求頭值,與插件後台的 ESA回源密鑰完全一致

以上全部確認無誤后,在插件的接入狀態標籤裏面找到“執行安全自檢”,確保測試通過。 即可開始測試AI驗證碼功能。 (如下圖)

第六步:啟用阿里雲ESA AI驗證碼

dz後台安全-驗證設置-組件列表-驗證碼-編輯-啟用阿里雲ESA AI驗證碼