前置知识: 网络安全

安全开发

00:00
3 min Intermediate 2026/6/14

安全开发:SDL、威胁建模、安全编码、SAST/DAST与安全测试

1. 安全开发生命周期(SDL)

1.1 SDL 阶段

阶段安全活动
需求安全需求、合规要求
设计威胁建模
实现安全编码、代码审查
测试SAST/DAST/渗透测试
发布安全评估、签名
运维漏洞响应、监控

1.2 安全左移

将安全活动前移到开发早期,降低修复成本:

2. 威胁建模

2.1 STRIDE 模型

威胁安全属性示例
Spoofing认证身份冒充
Tampering完整性数据篡改
Repudiation不可否认否认操作
Info Disclosure机密性信息泄露
Denial of Service可用性服务拒绝
Elevation授权权限提升

2.2 威胁建模流程

1. 绘制系统架构图
2. 识别信任边界
3. 应用STRIDE识别威胁
4. 评估风险等级
5. 制定缓解措施

3. 安全编码

3.1 输入验证

# 白名单验证
import re
if not re.match(r'^[a-zA-Z0-9_]{1,50}$', username):
    raise ValueError("Invalid username")

# 参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

3.2 输出编码

from markupsafe import escape
html = f"<p>Hello, {escape(name)}</p>"

3.3 安全配置

# Cookie安全
app.config['SESSION_COOKIE_SECURE'] = True
app.config['SESSION_COOKIE_HTTPONLY'] = True
app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'

# 安全头
@app.after_request
def set_headers(response):
    response.headers['X-Content-Type-Options'] = 'nosniff'
    response.headers['X-Frame-Options'] = 'DENY'
    response.headers['Content-Security-Policy'] = "default-src 'self'"
    return response

4. 安全测试

4.1 SAST

静态应用安全测试,扫描源代码

工具语言
Semgrep语言
SonarQube语言
CodeQL语言
BanditPython
BrakemanRuby

4.2 DAST

动态应用安全测试,测试运行中的应用

工具
OWASP ZAP
Burp Suite专业
NiktoWeb服务器

4.3 SCA

软件成分分析检查依赖漏洞:

工具说明
DependabotGitHub集成
Snyk商业
Trivy
OWASP Dependency-Check

5. 安全代码审查

5.1 审查清单

类别检查
认证密码存储、会话管理
授权访问控制权限检查
输入验证过滤编码
输出编码、CSP
加密算法选择、密钥管理
日志敏感信息脱敏
错误暴露信息

5.2 常见安全缺陷

缺陷CWE严重
SQL注入CWE-89
XSSCWE-79
硬编码密码CWE-259
不安全序列化CWE-502
路径遍历CWE-22
不安全随机数CWE-330

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式