| 1234567891011121314151617181920212223242526272829303132333435363738 |
- #!/bin/bash
- # Example PreToolUse hook for validating Write/Edit operations
- # This script demonstrates file write validation patterns
- set -euo pipefail
- # Read input from stdin
- input=$(cat)
- # Extract file path and content
- file_path=$(echo "$input" | jq -r '.tool_input.file_path // empty')
- # Validate path exists
- if [ -z "$file_path" ]; then
- echo '{"continue": true}' # No path to validate
- exit 0
- fi
- # Check for path traversal
- if [[ "$file_path" == *".."* ]]; then
- echo '{"hookSpecificOutput": {"permissionDecision": "deny"}, "systemMessage": "Path traversal detected in: '"$file_path"'"}' >&2
- exit 2
- fi
- # Check for system directories
- if [[ "$file_path" == /etc/* ]] || [[ "$file_path" == /sys/* ]] || [[ "$file_path" == /usr/* ]]; then
- echo '{"hookSpecificOutput": {"permissionDecision": "deny"}, "systemMessage": "Cannot write to system directory: '"$file_path"'"}' >&2
- exit 2
- fi
- # Check for sensitive files
- if [[ "$file_path" == *.env ]] || [[ "$file_path" == *secret* ]] || [[ "$file_path" == *credentials* ]]; then
- echo '{"hookSpecificOutput": {"permissionDecision": "ask"}, "systemMessage": "Writing to potentially sensitive file: '"$file_path"'"}' >&2
- exit 2
- fi
- # Approve the operation
- exit 0
|