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

phpfans 留言板安裝腳本 install.php 完整代碼解析與安全加固

     編輯:PHP 綜合知識

早期開源項目 phpfans 留言板 v1.0 的安裝向導代碼,包含數據庫創建、表結構初始化、默認數據插入、配置文件寫入。本文解析其流程並指出安全隱患。

安裝流程邏輯

  1. 接收 POST 表單:MySQL 主機/用戶/密碼/數據庫名、管理員帳號/密碼
  2. mysql_connect 驗證連接 → CREATE DATABASE IF NOT EXISTS
  3. 選擇數據庫 → SET NAMES 'gbk' (MySQL 4.1+ 判斷)
  4. 創建表 post (留言主表) / reply (回覆表) — MyISAM、gbk
  5. 插入一條歡迎留言 (含 HTML、表情圖片引用)
  6. 6. 生成 include/config.php 配置文件 (含 DB 憑證、管理員帳密、分頁大小) 7. 提示刪除 install.php、進入首頁

關鍵代碼片段

<?php
// 1. 連接驗證
$conn = @mysql_connect('localhost', $mydbuser, $mydbpw);
if (!$conn) exit('MySQL 用戶名或密碼不正確');

// 2. 創建數據庫
mysql_query("CREATE DATABASE IF NOT EXISTS `$mydbname`");
mysql_select_db($mydbname);

// 3. 字符集兼容 (MySQL 4.1+)
$char = '';
if (mysql_get_server_info() > '4.1') $char = 'DEFAULT CHARSET=gbk';

// 4. 創建表 post
$sql = "CREATE TABLE `post` (
    `p_id` INT(255) UNSIGNED NOT NULL AUTO_INCREMENT,
    `p_name` VARCHAR(20) NOT NULL,
    `p_email` VARCHAR(20) NOT NULL,
    `p_qq` VARCHAR(20) NOT NULL,
    `p_homepage` VARCHAR(100) NOT NULL,
    `p_image` VARCHAR(8) NOT NULL,
    `p_title` VARCHAR(160) NOT NULL,
    `p_content` MEDIUMTEXT NOT NULL,
    `p_ip` VARCHAR(15) NOT NULL,
    `p_date` DATETIME NOT NULL,
    PRIMARY KEY (`p_id`)
) ENGINE=MyISAM $char";
mysql_query($sql);

// 5. 初始數據
mysql_query("INSERT INTO `post` VALUES (1, '我不是魚', 'deng5765@163.com', '245821218',
    'https://www.phpfans.net', '01', '感謝使用...', '內容...', '127.0.0.1', NOW())");

// 6. 寫入配置文件
$str = "<?php\n";
$str .= "\$mydbhost = 'localhost';\n";
$str .= "\$mydbuser = '$mydbuser';\n";
$str .= "\$mydbpw = '$mydbpw';\n";
$str .= "\$mydbname = '$mydbname';\n";
$str .= "\$mydbcharset = 'gbk';\n";
$str .= "\$admin = '$_POST[m_admin]';\n";
$str .= "\$adminpw = '$_POST[m_adminpw]';\n";  // ❌ 明文存儲密碼
$str .= "\$eachpage = 5;\n";
$str .= "?>";
file_put_contents('include/config.php', $str);

安全隱患清單

隱患代碼位置風險修復
管理員密碼明文存儲$adminpw = '$_POST[m_adminpw]'配置文件洩露即帳號接管存儲 password_hash() 雜湊值
SQL 注入 (表名/數據庫名)CREATE DATABASE $mydbname 直接拼接惡意數據庫名執行任意 SQL白名單驗證 / 反引號包裹 / 預處理不支援 DDL
無 CSRF Token安裝表單無防偽誘導管理員重複安裝覆蓋配置Session Token 驗證
安裝後未強制刪除僅提示「請刪除」重裝覆蓋、信息洩露安裝成功自動 unlink(__FILE__) 或重定向鎖定
錯誤信息洩露echo mysql_error()路徑、結構信息外洩生產關閉 display_errors、記錄日誌
使用已棄用 mysql_* 函數全文PHP 7.0+ 不可用遷移 PDO / mysqli

現代化重構要點

  • **PDO + 預處理** (DDL 仍需拼接,嚴格驗證標識符合法性)
  • **密碼雜湊**:password_hash($_POST['adminpw'], PASSWORD_DEFAULT)
  • **配置文件權限**:chmod 600、存放於 Web 根目錄外
  • **環境變量配置**:.env + vlucas/phpdotenv,不入版本庫
  • **遷移系統**:類似 Laravel Migration,版本化管理 Schema
  • **安裝鎖文件**:touch('install.lock'),存在即禁止訪問安裝頁
原項目官網 phpfans.net 已不可訪問,代碼僅供歷史研究。現代留言板/評論系統建議使用 **Disqus / Gitalk / Valine / Twikoo** 等第三方服務,或成熟開源 **Commento / Isso / Remark42** 自建。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved