我在每次部署前使用的开发者安全检查清单
发布: (2026年3月11日 GMT+8 17:29)
3 分钟阅读
原文: Dev.to
Source: Dev.to
我在显示器上贴了一张安全检查清单。它已经帮我避免了至少十几次的漏洞发布。
代码示例
密码哈希(Python)
import bcrypt
def hash_password(plain_text):
salt = bcrypt.gensalt(rounds=12)
return bcrypt.hashpw(plain_text.encode(), salt)
def verify_password(plain_text, hashed):
return bcrypt.checkpw(plain_text.encode(), hashed)邮箱验证(Python)
import re
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(pattern, email) or len(email) > 254:
raise ValueError("Invalid email format")
return email.lower().strip()安全的 SQL 查询(Python)
# BAD
query = f"SELECT * FROM users WHERE id = {user_id}"
# GOOD
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))安全头(NGINX)
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;环境变量(Python)
# BAD
DATABASE_URL = "postgresql://admin:password123@db:5432/prod"
# GOOD
import os
DATABASE_URL = os.environ["DATABASE_URL"]检查清单
- 使用 bcrypt、scrypt 或 Argon2 对密码进行哈希
- 会话令牌随机、足够长并且会过期
- 对登录失败次数进行速率限制
安全控制摘要
- 认证:密码已哈希,会话会过期,登录尝试受速率限制
- 输入:所有用户输入在服务器端进行验证
- SQL:到处使用参数化查询
- XSS:所有输出均已转义
- 头部:已配置安全头(见上文)
- 机密:没有硬编码的机密;使用
.env文件并将其加入.gitignore - 依赖:运行
npm audit/pip-audit并保持结果干净 - HTTPS:全站使用 TLS,启用 HSTS
- 日志:记录认证事件;日志中不包含敏感数据
- 备份:已测试并验证数据库备份
资源
- CyberGuard Essentials(免费) – 包含实用示例的安全基础
- CyberGuard Advanced($11.99) – 渗透测试、威胁建模、进阶加固
将此检查清单打印出来并贴在你的显示器上。