我在每次部署前使用的开发者安全检查清单

发布: (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) – 渗透测试、威胁建模、进阶加固

将此检查清单打印出来并贴在你的显示器上。

0 浏览
Back to Blog

相关文章

阅读更多 »