npx skills add https://github.com/dasien/retrowarden --skill 'Security Code Review'系统地审查代码以发现安全漏洞,识别潜在的攻击向量,并确保实现遵循安全编码实践,以防范常见的攻击手段。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
上下文:审查身份验证端点
待审查代码:
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = db.execute(
f"SELECT * FROM users WHERE username='{username}' AND password='{password}'"
).fetchone()
if user:
session['user_id'] = user['id']
return redirect('/dashboard')
return "Invalid credentials"
识别出的安全问题:
安全实现:
from werkzeug.security import check_password_hash
from flask import session, request, redirect
from flask_wtf.csrf import CSRFProtect
import secrets
@app.route('/login', methods=['POST'])
@limiter.limit("5 per minute") # 速率限制
def login():
# CSRF 防护
if not validate_csrf(request.form.get('csrf_token')):
return "Invalid request", 403
username = request.form.get('username', '').strip()
password = request.form.get('password', '')
# 输入验证
if not username or not password:
return "Invalid credentials", 401
# 参数化查询防止 SQL 注入
user = db.execute(
"SELECT id, password_hash, failed_attempts, locked_until "
"FROM users WHERE username = ?",
(username,)
).fetchone()
# 检查账户锁定
if user and user['locked_until'] and user['locked_until'] > datetime.now():
return "Account temporarily locked", 429
# 使用时序安全比较检查密码
if user and check_password_hash(user['password_hash'], password):
# 重置失败尝试次数
db.execute("UPDATE users SET failed_attempts = 0 WHERE id = ?", (user['id'],))
# 重新生成会话以防止固定攻击
session.clear()
session['user_id'] = user['id']
session['csrf_token'] = secrets.token_hex(32)
# 记录成功登录
log_security_event('login_success', user_id=user['id'], ip=request.remote_addr)
return redirect('/dashboard')
# 跟踪失败尝试
if user:
attempts = user['failed_attempts'] + 1
if attempts >= 5:
locked_until = datetime.now() + timedelta(minutes=15)
db.execute(
"UPDATE users SET failed_attempts = ?, locked_until = ? WHERE id = ?",
(attempts, locked_until, user['id'])
)
else:
db.execute("UPDATE users SET failed_attempts = ? WHERE id = ?", (attempts, user['id']))
# 记录失败尝试
log_security_event('login_failure', username=username, ip=request.remote_addr)
return "Invalid credentials", 401
预期结果:安全的身份验证,包含:
每周安装次数
–
代码仓库
GitHub 星标数
4
首次出现时间
–
安全审计
Systematically review code for security vulnerabilities, identify potential attack vectors, and ensure implementation follows secure coding practices to protect against common exploits.
Identify Security-Critical Areas
Check for Common Vulnerabilities
Validate Security Controls
Review Cryptographic Implementations
Check Configuration Security
Context : Reviewing authentication endpoint
Code Under Review :
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = db.execute(
f"SELECT * FROM users WHERE username='{username}' AND password='{password}'"
).fetchone()
if user:
session['user_id'] = user['id']
return redirect('/dashboard')
return "Invalid credentials"
Security Issues Identified :
Secure Implementation :
from werkzeug.security import check_password_hash
from flask import session, request, redirect
from flask_wtf.csrf import CSRFProtect
import secrets
@app.route('/login', methods=['POST'])
@limiter.limit("5 per minute") # Rate limiting
def login():
# CSRF protection (via flask_wtf)
if not validate_csrf(request.form.get('csrf_token')):
return "Invalid request", 403
username = request.form.get('username', '').strip()
password = request.form.get('password', '')
# Input validation
if not username or not password:
return "Invalid credentials", 401
# Parameterized query prevents SQL injection
user = db.execute(
"SELECT id, password_hash, failed_attempts, locked_until "
"FROM users WHERE username = ?",
(username,)
).fetchone()
# Check account lockout
if user and user['locked_until'] and user['locked_until'] > datetime.now():
return "Account temporarily locked", 429
# Check password with timing-safe comparison
if user and check_password_hash(user['password_hash'], password):
# Reset failed attempts
db.execute("UPDATE users SET failed_attempts = 0 WHERE id = ?", (user['id'],))
# Regenerate session to prevent fixation
session.clear()
session['user_id'] = user['id']
session['csrf_token'] = secrets.token_hex(32)
# Log successful login
log_security_event('login_success', user_id=user['id'], ip=request.remote_addr)
return redirect('/dashboard')
# Track failed attempts
if user:
attempts = user['failed_attempts'] + 1
if attempts >= 5:
locked_until = datetime.now() + timedelta(minutes=15)
db.execute(
"UPDATE users SET failed_attempts = ?, locked_until = ? WHERE id = ?",
(attempts, locked_until, user['id'])
)
else:
db.execute("UPDATE users SET failed_attempts = ? WHERE id = ?", (attempts, user['id']))
# Log failed attempt
log_security_event('login_failure', username=username, ip=request.remote_addr)
return "Invalid credentials", 401
Expected Result : Secure authentication with:
Weekly Installs
–
Repository
GitHub Stars
4
First Seen
–
Security Audits
Azure RBAC 权限管理工具:查找最小角色、创建自定义角色与自动化分配
117,000 周安装