SSRF 與命令執行防護:別讓使用者輸入決定伺服器去哪兒、執行什么
圍繞圖片抓取、文檔轉換和運維接口,分別控制出站目的地、進程調用與運行權限。
本文目錄
兩類風險的目標不同
圖片抓取和網址預覽可能讓服務端存取使用者指定的地址,文檔轉換則可能調用外部進程。前者需要控制網路目的地,后者需要避免輸入改變命令結構。它們可以出現在同一功能中,應分別審查,而不是用一個“已過濾參數”的結論覆蓋。
出站控制覆蓋解析與重定向
按業務需求限制協議、目標和端口,并在地址解析及重定向后重新判斷目的地。將運行環境的出站權限縮小到必要服務,可降低應用校驗遺漏的影響。內網地址、回環地址和云元資料入口不能因使用者提供了一個看似合法的網域就自動放行。
能用庫完成的工作不拼接 shell
優先使用處理文件或資料的庫接口。確需調用程序時,將程序與參數分開傳遞,并針對參數含義做允許列表校驗;只轉義特殊字符仍可能留下危險選項。轉換進程使用低權限帳號、受限目錄和執行時間,避免與主業務共享敏感憑證。
驗證拒絕路徑與清理行為
在隔離測試環境驗證不允許的目的地被拒絕、異常任務會超時退出、臨時文件能清理,并檢查錯誤資訊是否泄露內部路徑。日誌保留請求關聯資訊而不記錄完整密鑰。產品入口防護之外,出站網路與進程權限必須同步收緊。
參考資料
OWASP OS command injection defense
