协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
critical-interval-security-checker【开发与工程】Analyzes code to identify security-critical time intervals and timing vulnerabilities in authentication, authorization, and time-sensitive security operations. Use this skill when reviewing code for proper timeout enforcement, token expiration, session management, rate limiting, password reset validity, or any time-sensitive security mechanism. Detec…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Analyze code to identify security-critical time intervals and timing vulnerabilities that could compromise security.
Look for code that handles:
See vulnerability_patterns.md for detailed patterns.
Critical checks:
Run the automated checker script:
# Check single file
python scripts/check_intervals.py path/to/file.py
# Check entire directory
python scripts/check_intervals.py src/
# Specify language
python scripts/check_intervals.py src/ --language python
The script detects:
For each security-critical operation, verify:
Expiration is set:
# Good: Expiration set
token_expiry = datetime.utcnow() + timedelta(hours=1)
Expiration is checked:
# Good: Expiration validated
if datetime.utcnow() > token_expiry:
raise TokenExpiredError()
Timeout is reasonable:
# Good: 1-hour reset token
RESET_TOKEN_EXPIRY = timedelta(hours=1)
# Bad: 7-day reset token (too long!)
RESET_TOKEN_EXPIRY = timedelta(days=7)
Rate limiting exists:
# Good: Rate limited
@limiter.limit("5 per 15 minutes")
def login():
pass
Server-side enforcement:
# Good: Server validates expiration
decoded = jwt.decode(token, SECRET_KEY) # Checks exp
# Bad: Client-side only
decoded = jwt.decode(token, options={"verify_signature": False})
Consult time_intervals.md for recommended values:
Common intervals:
Check if intervals match use case:
For each issue found, document:
Issue: Missing expiration check on password reset token
Location: auth/reset_password.py:45
Severity: High
Current: Token created with expiry but never validated
Recommendation: Add expiration check before using token
Code fix:
if datetime.utcnow() > token.expires_at:
raise TokenExpiredError("Reset token expired")
Fix missing expiration checks:
# Before
def validate_token(token):
decoded = jwt.decode(token, SECRET_KEY, options={"verify_signature": False})
return decoded['user_id']
# After
def validate_token(token):
try:
decoded = jwt.decode(token, SECRET_KEY) # Verifies exp automatically
return decoded['user_id']
except jwt.ExpiredSignatureError:
raise AuthenticationError("Token expired")
Fix excessive timeouts:
# Before
RESET_TOKEN_EXPIRY = timedelta(days=7) # Too long!
# After
RESET_TOKEN_EXPIRY = timedelta(hours=1) # Appropriate
Add rate limiting:
# Before
@app.route('/login', methods=['POST'])
def login():
pass
# After
@app.route('/login', methods=['POST'])
@limiter.limit("5 per 15 minutes")
def login():
pass
Fix hardcoded timeouts:
# Before
expiry = datetime.utcnow() + timedelta(seconds=3600) # Magic number
# After
SESSION_TIMEOUT = timedelta(hours=1) # Named constant
expiry = datetime.utcnow() + SESSION_TIMEOUT
Missing expiration check:
No rate limiting:
Client-side only validation:
Excessive timeouts:
Python:
# Look for
jwt.decode(..., verify=False) # Bad
timedelta(days=7) # Check context
@limiter.limit # Good
datetime.now() vs datetime.utcnow() # Timezone issue
JavaScript:
// Look for
jwt.decode(...) // Check if expiration validated
Date.now() < exp // Client-side check
rateLimit(...) // Good
setTimeout(..., 86400000) // Magic number
Java:
// Look for
Jwts.parser() // Check if expiration validated
Duration.ofDays(30) // Check context
@RateLimit // Good
The check_intervals.py script automates detection:
# Check Python code
python scripts/check_intervals.py src/ --language python
# Check JavaScript code
python scripts/check_intervals.py src/ --language javascript
# Auto-detect language
python scripts/check_intervals.py src/
Output provides:
Always:
Never: