Addresses security concerns raised in PR review:
1. Dynamic headers now require explicit allowlist per server:
- New `dynamic_headers.allowed` config field lists permitted header names
- Without allowlist, no dynamic headers are forwarded (secure by default)
- Header names matched case-insensitively
2. Add limits to prevent abuse:
- `max_count`: max headers per request (default: 10)
- `max_value_len`: max value length (default: 4096)
3. Protect internal metadata in pico channel:
- Reserved keys (platform, session_id, conn_id, etc.) cannot be
overwritten by client-provided metadata
Example config:
```json
"dynamic_headers": {
"allowed": ["X-Grafana-Service-Account-Token"],
"max_count": 5,
"max_value_len": 2048
}
```
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>