我有一個小應用程序,它通過執行一個進程來處理http請求,併爲用戶提供的查詢字符串提供一些輸入。我想知道什麼是過濾遠程執行輸入的最佳方法。 PHP的替代,例如會是這樣的: http://php.net/manual/en/function.escapeshellarg.php使用Golang安全地執行命令(避免遠程執行)
眼下的輸入應該是一個有效的URL,如果這使得它更容易,但非常一般的過濾器將是首選。
我有一個小應用程序,它通過執行一個進程來處理http請求,併爲用戶提供的查詢字符串提供一些輸入。我想知道什麼是過濾遠程執行輸入的最佳方法。 PHP的替代,例如會是這樣的: http://php.net/manual/en/function.escapeshellarg.php使用Golang安全地執行命令(避免遠程執行)
眼下的輸入應該是一個有效的URL,如果這使得它更容易,但非常一般的過濾器將是首選。
通常這樣的魔法功能很難正確使用,如果您嚴重依賴它們,它們通常會讓您的應用程序面臨攻擊。
我建議您使用智能URL /請求方案來獲取運行所需的命令,並在用戶請求和shell執行之間放置一定級別的解釋,以免由用戶直接使用參數。
您可以獲得包含?verbose=true
的請求,並在命令行上將它們轉換爲-v
,例如。當處理像字符串這樣的用戶輸入時,需要直接給正在運行的命令,你需要用引號做簡單的轉義(用一個簡單的檢查來查看輸入是否包含引號),以確保你不會遇到「Bobby表「的問題。
另一種方法是通過管道或文件讓程序和底層命令交換數據。這將減少離開命令輸入的開放攻擊向量的可能性。
如果您使用[os/exec](http://golang.org/pkg/os/exec/),則不會將它傳遞到shell,因此不需要執行shell轉義。你應該非常仔細地驗證輸入! –
是的,使用os.exec,不知道它沒有通過它很好的知道它的殼。但即使它不是像「command &&惡意」應該工作的例子? – Feras
本質上,PHP通過將進程執行卸載到shell(甚至不保證爲sh兼容的shell)並使您完成安全工作而得到錯誤。幾乎所有其他語言的os庫都直接調用內核,因此可以隱式避免注入攻擊。 – krait