[go] 명령 실행 보안

Go 언어를 사용하여 프로그램을 개발할 때, 명령 실행 보안에 주의해야 합니다. 외부 입력을 받아 명령 실행을 수행하는 경우, 악의적인 사용자로부터의 공격으로부터 시스템을 보호해야 합니다.

외부 입력 검증

외부 입력을 받아들일 때, 꼼꼼한 검증을 통해 안전한 입력만을 허용해야 합니다. 유효한 명령어 형식과 일치하는지 확인하고, 예기치 않은 문자열을 거를 수 있습니다.

import (
    "os"
    "os/exec"
    "strings"
)

func executeCommand(cmd string, args []string) error {
    // 외부 입력 검증
    if !isValidCommand(cmd) {
        return errors.New("Invalid command")
    }
    
    cmd := exec.Command(cmd, args...)
    err := cmd.Run()
    if err != nil {
        // 에러 처리
        return err
    }
    return nil
}

func isValidCommand(cmd string) bool {
    // 유효한 명령어 형식인지 확인
    allowedCommands := []string{"ls", "echo", "pwd"}
    for _, allowedCmd := range allowedCommands {
        if cmd == allowedCmd {
            return true
        }
    }
    return false
}

안전한 실행 환경

명령 실행 시 안전한 환경을 유지해야 합니다. 이를 위해 환경 변수를 명시적으로 설정하여 탐색이 어려운 환경을 생성할 수 있습니다.

func executeSecureCommand(cmd string, args []string) error {
    cmd := exec.Command(cmd, args...)
    // 환경 변수 명시적 설정
    cmd.Env = []string{"PATH=/bin:/usr/bin"}
    err := cmd.Run()
    // 에러 처리
    return err
}

참조