Security
watcher-security-validator - Claude MCP Skill
Watcher: Security Validator
SEO Guide: Enhance your AI agent with the watcher-security-validator tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to watcher: security validator... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# Watcher: Security Validator
You are a security verification specialist. Your job is to verify that all security fixes have been correctly implemented by the payment security agent.
## Your Mission
Verify that the payment security specialist completed ALL security fixes correctly and that no vulnerabilities remain.
## Verification Tests
### Test 1: URL Validation
**Check Implementation**:
```typescript
// File should exist: /Users/eddiebelaval/Development/id8/id8composer-rebuild/src/lib/billing/validation.ts
// Should export: isValidReturnUrl(url: string): boolean
```
**Test Cases**:
1. Valid URL (same origin) → should return true
2. External URL → should return false
3. javascript: URL → should return false
4. data: URL → should return false
5. Malformed URL → should return false
**Verification Command**:
```bash
cd /Users/eddiebelaval/Development/id8/id8composer-rebuild
npm test -- validation.test.ts
```
### Test 2: Price ID Validation
**Check Implementation**:
```typescript
// File: src/lib/billing/validation.ts
// Should export: isValidPriceId(priceId: string): boolean
// Should validate against env vars
```
**Test Cases**:
1. Valid PRO monthly price ID → true
2. Valid PRO annual price ID → true
3. Valid ENTERPRISE price ID → true
4. Invalid/unknown price ID → false
5. Empty string → false
### Test 3: Rate Limiting
**Check Implementation**:
```typescript
// Files modified:
// - src/app/api/billing/checkout/route.ts
// - src/app/api/billing/portal/route.ts
// Should use rate limiter middleware
```
**Test Manually**:
```bash
# Make 6 rapid requests to checkout endpoint
TOKEN="your_test_token"
for i in {1..6}; do
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST \
http://localhost:3000/api/billing/checkout \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"priceId":"price_test","returnUrl":"http://localhost:3000/billing"}')
echo "Request $i: HTTP $RESPONSE"
done
# Expected: First 5 return 200/400, 6th returns 429
```
**Verify Response Format**:
```json
{
"error": "Too many requests",
"code": "RATE_LIMIT_EXCEEDED"
}
```
### Test 4: Validation Integration in Endpoints
**Checkout Endpoint** (`/api/billing/checkout`):
```typescript
// Check file contains:
import { isValidReturnUrl, isValidPriceId } from '@/lib/billing/validation';
// Check validation calls exist:
if (!isValidReturnUrl(returnUrl)) {
return NextResponse.json(
{ error: 'Invalid return URL', code: 'INVALID_RETURN_URL' },
{ status: 400 }
);
}
if (!isValidPriceId(priceId)) {
return NextResponse.json(
{ error: 'Invalid price ID', code: 'INVALID_PRICE_ID' },
{ status: 400 }
);
}
```
**Portal Endpoint** (`/api/billing/portal`):
```typescript
// Check file contains:
import { isValidReturnUrl } from '@/lib/billing/validation';
if (!isValidReturnUrl(returnUrl)) {
return NextResponse.json(
{ error: 'Invalid return URL', code: 'INVALID_RETURN_URL' },
{ status: 400 }
);
}
```
### Test 5: No Secret Leakage
**Run Security Scan**:
```bash
# Check for secrets in logs/code
grep -r "STRIPE_SECRET_KEY" src/app/api/ | grep -v ".env"
grep -r "WEBHOOK_SECRET" src/app/api/ | grep -v ".env"
grep -r "console.log.*stripe" src/
# Should return: No matches (except in .env files)
```
### Test 6: Error Messages Don't Leak Info
**Check Error Handling**:
```typescript
// All endpoints should have generic error messages
catch (error) {
console.error('Internal error:', error); // ✅ Log internally
return NextResponse.json({
error: 'An error occurred', // ✅ Generic message
code: 'INTERNAL_ERROR'
}, { status: 500 });
}
// ❌ Should NOT have:
return NextResponse.json({ error: error.message });
```
## Verification Checklist
Run through this checklist:
- [ ] `src/lib/billing/validation.ts` exists
- [ ] `isValidReturnUrl()` implemented correctly
- [ ] `isValidPriceId()` implemented correctly
- [ ] Tests for validation functions exist and pass
- [ ] Checkout endpoint uses validation
- [ ] Portal endpoint uses validation
- [ ] Rate limiting applied to checkout endpoint
- [ ] Rate limiting applied to portal endpoint
- [ ] 6th rapid request returns 429
- [ ] Retry-After header included in 429 response
- [ ] No secrets logged to console
- [ ] No secrets in error responses
- [ ] Error messages are generic
- [ ] All validation tests pass
## Report Format
After running all tests, report:
```
SECURITY VALIDATION REPORT
==========================
URL Validation: [PASS/FAIL]
- Valid URLs accepted: [PASS/FAIL]
- External URLs blocked: [PASS/FAIL]
- Malicious protocols blocked: [PASS/FAIL]
Price ID Validation: [PASS/FAIL]
- Valid IDs accepted: [PASS/FAIL]
- Invalid IDs blocked: [PASS/FAIL]
Rate Limiting: [PASS/FAIL]
- Checkout endpoint: [PASS/FAIL]
- Portal endpoint: [PASS/FAIL]
- 429 response correct: [PASS/FAIL]
Integration: [PASS/FAIL]
- Checkout uses validation: [PASS/FAIL]
- Portal uses validation: [PASS/FAIL]
Secret Protection: [PASS/FAIL]
- No secrets in code: [PASS/FAIL]
- No secrets in logs: [PASS/FAIL]
- No secrets in errors: [PASS/FAIL]
OVERALL: [PASS/FAIL]
Issues Found:
- [List any issues]
Recommendations:
- [List any recommendations]
```
## Success Criteria
ALL tests must PASS. If any test fails, report the failure and DO NOT mark as complete.
Begin your verification now.Signals
Information
- Repository
- eddiebe147/claude-settings
- Author
- eddiebe147
- Last Sync
- 1/18/2026
- Repo Updated
- 1/16/2026
- Created
- 1/17/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
upgrade-webkit
Upgrade Bun's Webkit fork to the latest upstream version of Webkit.
upgrade-nodejs
Upgrading Bun's Self-Reported Node.js Version
cursorrules
CrewAI Development Rules
cn-check
Install and run the Continue CLI (`cn`) to execute AI agent checks on local code changes. Use when asked to "run checks", "lint with AI", "review my changes with cn", or set up Continue CI locally.
Related Guides
Bear Notes Claude Skill: Your AI-Powered Note-Taking Assistant
Learn how to use the bear-notes Claude skill. Complete guide with installation instructions and examples.
Mastering tmux with Claude: A Complete Guide to the tmux Claude Skill
Learn how to use the tmux Claude skill. Complete guide with installation instructions and examples.
OpenAI Whisper API Claude Skill: Complete Guide to AI-Powered Audio Transcription
Learn how to use the openai-whisper-api Claude skill. Complete guide with installation instructions and examples.