首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

PHP 調用 C++ 應用程式實戰:命令列參數傳遞、G++ 編譯與 Web 介面安全防護

     編輯:C++ 入門

架構概覽

瀏覽器 → PHP 腳本 (Web 介面) → C++ 可執行檔 (業務邏輯) → 標準輸出 → PHP 捕獲 → 網頁顯示

核心機制:PHP passthru() / exec() / shell_exec() 執行外部程式並捕獲輸出。

C++ 端:命令列參數處理範例


#include <iostream>
#include <cstring>

int main(int argc, char* argv[]) {
    std::cout << "You passed " << argc - 1 << " arguments.\n";
    std::cout << "These arguments are:\n";
    for (int i = 1; i < argc; ++i) {
        std::cout << "[" << i << "] " << argv[i] << "\n";
    }
    return 0;
}

Linux/G++ 編譯部署流程

  1. 確認工具鏈: which g++ 應輸出路徑,否則 apt-get install g++ / yum install gcc-c++。
  2. 編譯目標檔: g++ -c sampleapp.cpp -o sampleapp.o
  3. 連結可執行檔: g++ sampleapp.o -o sampleapp
  4. 測試執行: ./sampleapp first second 應輸出兩個參數。
  5. 部署: 將 sampleapp 放置 Web 伺服器可存取路徑 (如 /var/www/html/bin/),設定執行權限 chmod +x sampleapp。

PHP 端:安全的 Web 介面包裝


&1');
        if ($output === null) $error = "執行失敗或超時";
    }
}
?>


C++ App Web Interface

    

C++ 應用程式參數測試

錯誤:

輸出結果:

安全防護鐵律

  1. 絕不直接拼接用戶輸入到命令字串: 必須用 escapeshellarg() (單參數) 或 escapeshellcmd() (整個命令)。
  2. 白名單驗證: 正則限制字元集、長度、參數個數。
  3. 最小權限: Web 使用者 (www-data/apache) 僅擁有執行特定二進位檔權限,無 Shell 登入、無寫入系統目錄權限。
  4. 超時控制: proc_open() + stream_set_timeout() 或系統層面 timeout 命令包裹。
  5. 輸出轉義: HTML 輸出前 htmlspecialchars() 防 XSS。

進階架構建議

  • 高併發: 改用 FastCGI / gRPC / REST API (C++ 內嵌 HTTP 伺服器如 cpp-httplib, Crow, Pistache) 替代進程啟動開銷。
  • 狀態保持: C++ 程式改為常駐服務,PHP 透過 Unix Socket / TCP / 消息佇列通訊。
  • 日誌審計: 記錄每次調用參數、輸出、耗時、呼叫者 IP。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved