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

PHP 實現遠程服務器關機/重啟功能

     編輯:PHP 相關知識

PHP 遠程執行系統命令實現服務器關機與重啟

本文展示一個通過 Web 界面遠程執行 Windows 系統關機命令的 PHP 實現。雖然功能強大,但安全風險極高,僅供內網受控環境教學參考,嚴禁暴露在公網或生產環境中使用。

核心實現代碼

<?php
/**
 * 遠程執行系統命令
 * 要求:Web 服務器進程需有 cmd.exe 執行權限
 * 作者:薛如飛
 * 日期:2008-08-28
 */

if (isset($_POST['cmd'])) {
    $cmd = stripslashes($_POST['cmd']);
    exec($cmd, $out);
    var_dump($out);
    echo '
'; var_dump($cmd); } else { ?> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <form action="index.php" method="post" name="form0" id="form0"> <p> </p> <p align="center">CMD 控制台</p> <table width="200" border="0" align="center"> <tr> <td width="81" height="18">選擇操作:</td> <td width="109"> <select name="cmd"> <option value="shutdown -r" selected="selected">重啟計算機</option> <option value="shutdown -s">關閉計算機</option> <option value="shutdown -l">注銷當前用戶</option> </select> </td> </tr> <tr> <td></td> <td><input type="submit" name="Submit" value="提交執行" /></td> </tr> </table> <p></p> </form> <?php } ?>

Windows shutdown 命令參數詳解

參數功能常用組合
-s關機shutdown -s -t 60 (60秒後關機)
-r重啟shutdown -r -t 0 (立即重啟)
-l注銷shutdown -l
-t xxx設置倒計時(秒)shutdown -s -t 300
-c "msg"關機提示信息shutdown -r -c "系統維護"
-f強制關閉應用shutdown -s -f
-a取消已排程關機shutdown -a
-m \\computer遠程計算機shutdown -m \\192.168.1.100 -r

⚠️ 嚴重安全風險分析

🔴 高危漏洞清單

  • 命令注入:用戶可提交任意命令(如 `format c:`, `del /s *.*`, `net user hacker pass /add`)
  • 權限過高:Web 進程需擁有系統級命令執行權限
  • 無認證授權:任何訪問者均可執行關機操作
  • 無審計日誌:無操作記錄,事後無法追蹤
  • CSRF 攻擊:無 Token 驗證,易被惡意頁面誘導提交

安全加固方案(若必須使用)

1. 基礎防護

<?php
// 嚴格命令白名單
$allowed_commands = [
    'shutdown -r' => '重啟計算機',
    'shutdown -s' => '關閉計算機', 
    'shutdown -l' => '注銷用戶'
];

if (isset($_POST['cmd']) && isset($allowed_commands[$_POST['cmd']])) {
    $cmd = $allowed_commands[$_POST['cmd']];
    // 添加 CSRF Token 驗證
    if (!verify_csrf_token($_POST['token'])) die('Token 無效');
    
    // 添加 IP 白名單
    $allowed_ips = ['192.168.1.100', '10.0.0.50'];
    if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) die('IP 不允許');
    
    // 記錄操作日誌
    log_operation($_SERVER['REMOTE_ADDR'], $cmd);
    
    exec($cmd, $out, $return_code);
    // ...
}
?>

2. 進階架構:任務隊列 + 守護進程

// Web 端:寫入任務隊列(數據庫/Redis)
$task = [
    'command' => 'shutdown -r',
    'ip' => $_SERVER['REMOTE_ADDR'],
    'user' => $current_user,
    'time' => time(),
    'status' => 'pending'
];
$db->insert('system_tasks', $task);

// 守護進程(系統服務,高權限運行):
// 1. 輪詢任務表
// 2. 驗證任務合法性
// 3. 執行命令
// 4. 記錄結果
// 優點:Web 進程無需高權限,權限隔離,可審計

跨平台兼容性說明

現代替代方案

  • IPMI/iDRAC/iLO:服務器硬件級遠程管理,獨立於操作系統
  • Ansible/SaltStack:自動化運維工具,支持批量、定時、條件式操作
  • 系統監控平台:Zabbix/Prometheus + Alertmanager 觸發自動化腳本
  • 雲廠商 API:AWS EC2 RebootInstances、阿里云 RebootInstance 等

總結:此代碼展示了 PHP exec() 函數調用系統命令的基本用法,但在任何實際場景中,直接暴露系統命令執行接口都是不可接受的安全風險。請採用權限分離、審計日誌、自動化運維平台等專業方案替代。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
系統關機命令權限要求
Windowsshutdown -sSeShutdownPrivilege
Linuxshutdown -h now / poweroffroot 或 sudo 權限
macOSshutdown -h nowroot 權限