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

DedeCMS「Safe Alert: Request Error step 1/2」解決方案全集

     編輯:PHP 相關知識

DedeCMS「Safe Alert: Request Error step 1/2」解決方案全集

DedeCMS 5.7 SP1 為防 SQL 注入,在 include/dedesql.class.php 引入 safeCheck 機制。當提交內容包含 union|sleep|benchmark|load_file|outfile 等關鍵字時觸發攔截,顯示「Safe Alert: Request Error step 1/2」或「step 2」。本文提供兩種解決方案及風險提示。

方案一:關閉全域安全檢查(快速但有風險)

編輯 include/dedesql.class.php,找到建構函數(約第 50 行):

// 原代碼
$this->safeCheck = true;
// 修改為
$this->safeCheck = FALSE;

效果:所有 SQL 執行跳過關鍵字檢查,錯誤即時消失。
風險:失去注入防護,若前端未做嚴格過濾,極易被攻擊。

方案二:調整系統緩存模式(官方建議,針對 step 1/2)

  1. 後台 → 系統 → 系統基本參數 → 性能選項
  2. 將「緩存形式」改為 id
  3. 點擊「更新系統緩存」

適用場景:因緩存衝突導致誤判的 step 1/2;對 step 2(直接 SQL 檢查觸發)通常無效。

方案三:精準白名單(推薦生產環境)

在執行已知安全的 SQL 前臨時關閉,執行完恢復:

$dsql->safeCheck = false;
$dsql->ExecuteNoneQuery($sql);
$dsql->safeCheck = true;

或在 dedesql.class.php 的 SetQuery/Execute 方法中,針對特定表/欄位跳過檢查(需二次開發能力)。

常見誤區

以為是模板標籤語法錯誤?
錯誤訊息來自 dedesql.class.php,與模板引擎無關。
直接刪除關鍵字檢查代碼?
同方案一,極度不建議。

最佳實踐建議

  • 前端輸入統一使用 htmlspecialchars()、addslashes() 或 Dede 內建 HtmlReplace() 過濾。
  • 後台發布文章時若需包含技術關鍵字(如教學內容),採用方案三臨時放行。
  • 定期檢查 data/logs/ 下的 SQL 執行日誌,發現異常及時封鎖 IP。

在安全與易用之間取得平衡,才是解決 DedeCMS Safe Alert 的正確姿勢。

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