如果需要在服務端代碼中使用Runtime.getRuntime().exec(cmd)或ProcessBuilder等執行操作系統命令,則禁止從客戶端獲取命令,且盡量不要從客戶端獲取命令的參數。若代碼邏輯中必須從客戶端獲取命令參數,必須采用正則表達式對參數進行嚴格的校驗。
防御方法:
1.外部輸入的參數需要做輸入校驗,對&|<>等特殊符號需要做過濾。
2.外部拼湊的執行命令不可以直接寫入文件中執行。
3.最后執行者不是root用戶,或者root權限的用戶。
4.構造輸入超過該點功能限制的命令(無法直接輸入時,使用burpsuite攔截請求后輸入),如mkdir,rm file等