首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

PHP 中的引用機制與 MySQL 密碼加密實戰探索

     編輯:MySQL 綜合教學

PHP 中的引用機制與 MySQL 密碼加密實戰探索

開發 MySQL 雜湊庫時遇到的引用傳遞、密碼加密演算法與權限繞過問題,記錄探索過程與核心知識點。

一、MySQL 兩代密碼加密演算法

版本函數演算法範例輸出
≤ 4.0OLD_PASSWORD()MySQL323 (雙重 SHA1 簡化版)5d2e19393cc5ef67
≥ 4.1PASSWORD()MySQL SHA1 (SHA1(SHA1(password)))*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19

可直接在 SQL 執行驗證:

SELECT OLD_PASSWORD('password');
SELECT PASSWORD('password');

二、PHP 引用傳遞與資料庫操作

PHP 5+ 物件預設引用傳遞,陣列/標量需顯式 &:

function process(&$data) {
    $data['processed'] = true;
}
$arr = [];
process($arr); // $arr 被修改

PDO/MySQLi 預處理語句綁定參數時需注意引用:

$stmt = $pdo->prepare("INSERT INTO users (name, pwd_hash) VALUES (?, ?)");
$name = 'test';
$hash = '*ABC...'; // PASSWORD() 結果
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $hash); // 必須是變數,不能直接放表達式
$stmt->execute();

三、MySQL data 目錄權限風險

若 /var/lib/mysql/mysql/user.MYD 可讀,root 雜湊可被直接提取:

strings /var/lib/mysql/mysql/user.MYD | grep -A1 root

防護措施:

  • 嚴格限制 data 目錄權限:chown -R mysql:mysql /var/lib/mysql && chmod 750 /var/lib/mysql
  • 啟用 skip_show_database 限制資料庫列舉
  • 定期輪換 root 密碼,使用強密碼策略

四、雜湊庫設計思路

  • 使用 PASSWORD() 結果作為查找鍵,支援常見弱密碼快速比對
  • 結合 OLD_PASSWORD() 兼容舊版本
  • 批量導入時使用 INSERT ... VALUES (...), (...) 多值語法提升效能
  • 考慮使用 PHP Generator 分批處理大量字典,避免記憶體溢出

資料庫安全不僅在於加密演算法,更在於最小權限原則、目錄權限管控與審計日誌完整性。開發工具時切勿忽視防禦面建設。

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