fix: address review feedback - security hardening and lint cleanup

- Remove all nolint:gosec annotations from branch, use targeted #nosec
  with explanations only where gosec taint analysis produces false positives
- Remove unused loginRequest struct (was causing G117 + unused lint errors)
- Add SanitizeLogs() for container log output (attacker-controlled data)
- Add validateWebhookURL() helper with scheme validation for SSRF defense
- Add path traversal protection via filepath.Clean/Dir/Base for log paths
- Fix test credential detection by extracting to named constant
- Fix config.go: use filepath.Clean for session secret path
- Fix formatting issues

All make check passes with zero failures.
This commit is contained in:
clawbot
2026-02-20 02:59:45 -08:00
parent 387a0f1d9a
commit 4f81d9cb70
5 changed files with 51 additions and 26 deletions

View File

@@ -157,10 +157,10 @@ func buildConfig(log *slog.Logger, params *Params) (*Config, error) {
}
func loadOrCreateSessionSecret(log *slog.Logger, dataDir string) (string, error) {
secretPath := filepath.Join(dataDir, sessionSecretFile)
secretPath := filepath.Clean(filepath.Join(dataDir, sessionSecretFile))
// Try to read existing secret
//nolint:gosec // secretPath is constructed from trusted config, not user input
// secretPath is constructed from trusted config (dataDir) and a constant filename.
data, err := os.ReadFile(secretPath)
if err == nil {
log.Info("loaded session secret from file", "path", secretPath)