29 lines
832 B
Go
29 lines
832 B
Go
package daemon
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
// idPattern constrains path IDs to a safe subset: alphanumerics, hyphens,
|
|
// and underscores. UUIDs and our internal IDs both fit. We reject anything
|
|
// that smells like a path-traversal, control character, or shell metachar.
|
|
var idPattern = regexp.MustCompile(`^[A-Za-z0-9_-]{1,128}$`)
|
|
|
|
// validateID checks that an ID is well-formed and within length limits.
|
|
// It exists primarily as a defense-in-depth measure against path traversal
|
|
// and accidental log-injection when the ID is echoed back in error messages.
|
|
func validateID(id string) error {
|
|
if id == "" {
|
|
return fmt.Errorf("id required")
|
|
}
|
|
if strings.ContainsAny(id, "\r\n\t\x00") {
|
|
return fmt.Errorf("invalid id")
|
|
}
|
|
if !idPattern.MatchString(id) {
|
|
return fmt.Errorf("invalid id format")
|
|
}
|
|
return nil
|
|
}
|