mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-13 22:50:24 +02:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,286 @@
|
||||
---
|
||||
name: secure-code-review
|
||||
description: 安全代码审查的专业技能和方法论
|
||||
version: 1.0.0
|
||||
---
|
||||
|
||||
# 安全代码审查
|
||||
|
||||
## 概述
|
||||
|
||||
安全代码审查是识别代码中安全漏洞的重要方法。本技能提供安全代码审查的方法、工具和最佳实践。
|
||||
|
||||
## 审查范围
|
||||
|
||||
### 1. 输入验证
|
||||
|
||||
**检查项目:**
|
||||
- 用户输入验证
|
||||
- 参数验证
|
||||
- 数据过滤
|
||||
- 边界检查
|
||||
|
||||
### 2. 输出编码
|
||||
|
||||
**检查项目:**
|
||||
- XSS防护
|
||||
- 输出编码
|
||||
- 内容安全策略
|
||||
- 响应头设置
|
||||
|
||||
### 3. 认证授权
|
||||
|
||||
**检查项目:**
|
||||
- 认证机制
|
||||
- 会话管理
|
||||
- 权限控制
|
||||
- 密码处理
|
||||
|
||||
### 4. 加密和密钥
|
||||
|
||||
**检查项目:**
|
||||
- 数据加密
|
||||
- 密钥管理
|
||||
- 哈希算法
|
||||
- 随机数生成
|
||||
|
||||
## 审查方法
|
||||
|
||||
### 1. 静态分析
|
||||
|
||||
**使用SAST工具:**
|
||||
```bash
|
||||
# SonarQube
|
||||
sonar-scanner
|
||||
|
||||
# Checkmarx
|
||||
# 使用Web界面
|
||||
|
||||
# Fortify
|
||||
sourceanalyzer -b project build.sh
|
||||
sourceanalyzer -b project -scan
|
||||
|
||||
# Semgrep
|
||||
semgrep --config=auto .
|
||||
```
|
||||
|
||||
### 2. 手动审查
|
||||
|
||||
**审查清单:**
|
||||
- [ ] 输入验证
|
||||
- [ ] 输出编码
|
||||
- [ ] SQL注入
|
||||
- [ ] XSS漏洞
|
||||
- [ ] 认证授权
|
||||
- [ ] 加密使用
|
||||
- [ ] 错误处理
|
||||
- [ ] 日志记录
|
||||
|
||||
### 3. 代码模式识别
|
||||
|
||||
**危险函数:**
|
||||
```python
|
||||
# Python危险函数
|
||||
eval()
|
||||
exec()
|
||||
pickle.loads()
|
||||
os.system()
|
||||
subprocess.call()
|
||||
```
|
||||
|
||||
```java
|
||||
// Java危险函数
|
||||
Runtime.exec()
|
||||
ProcessBuilder()
|
||||
Class.forName()
|
||||
```
|
||||
|
||||
```php
|
||||
// PHP危险函数
|
||||
eval()
|
||||
exec()
|
||||
system()
|
||||
passthru()
|
||||
```
|
||||
|
||||
## 常见漏洞模式
|
||||
|
||||
### SQL注入
|
||||
|
||||
**危险代码:**
|
||||
```java
|
||||
String query = "SELECT * FROM users WHERE id = " + userId;
|
||||
Statement stmt = connection.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(query);
|
||||
```
|
||||
|
||||
**安全代码:**
|
||||
```java
|
||||
String query = "SELECT * FROM users WHERE id = ?";
|
||||
PreparedStatement stmt = connection.prepareStatement(query);
|
||||
stmt.setInt(1, userId);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
```
|
||||
|
||||
### XSS漏洞
|
||||
|
||||
**危险代码:**
|
||||
```javascript
|
||||
document.innerHTML = userInput;
|
||||
element.innerHTML = "<div>" + userInput + "</div>";
|
||||
```
|
||||
|
||||
**安全代码:**
|
||||
```javascript
|
||||
element.textContent = userInput;
|
||||
element.setAttribute("data-value", userInput);
|
||||
// 或使用编码库
|
||||
element.innerHTML = escapeHtml(userInput);
|
||||
```
|
||||
|
||||
### 命令注入
|
||||
|
||||
**危险代码:**
|
||||
```python
|
||||
import os
|
||||
os.system("ping " + user_input)
|
||||
```
|
||||
|
||||
**安全代码:**
|
||||
```python
|
||||
import subprocess
|
||||
subprocess.run(["ping", "-c", "1", validated_input])
|
||||
```
|
||||
|
||||
### 路径遍历
|
||||
|
||||
**危险代码:**
|
||||
```java
|
||||
String filePath = "/uploads/" + fileName;
|
||||
File file = new File(filePath);
|
||||
```
|
||||
|
||||
**安全代码:**
|
||||
```java
|
||||
String basePath = "/uploads/";
|
||||
String fileName = Paths.get(fileName).getFileName().toString();
|
||||
String filePath = basePath + fileName;
|
||||
File file = new File(filePath);
|
||||
if (!file.getCanonicalPath().startsWith(basePath)) {
|
||||
throw new SecurityException("Invalid path");
|
||||
}
|
||||
```
|
||||
|
||||
### 硬编码密钥
|
||||
|
||||
**危险代码:**
|
||||
```java
|
||||
String apiKey = "1234567890abcdef";
|
||||
String password = "admin123";
|
||||
```
|
||||
|
||||
**安全代码:**
|
||||
```java
|
||||
String apiKey = System.getenv("API_KEY");
|
||||
String password = keyStore.getPassword("db_password");
|
||||
```
|
||||
|
||||
## 工具使用
|
||||
|
||||
### SonarQube
|
||||
|
||||
```bash
|
||||
# 启动SonarQube
|
||||
docker run -d -p 9000:9000 sonarqube
|
||||
|
||||
# 运行扫描
|
||||
sonar-scanner \
|
||||
-Dsonar.projectKey=myproject \
|
||||
-Dsonar.sources=. \
|
||||
-Dsonar.host.url=http://localhost:9000
|
||||
```
|
||||
|
||||
### Semgrep
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
pip install semgrep
|
||||
|
||||
# 运行扫描
|
||||
semgrep --config=auto .
|
||||
|
||||
# 使用规则
|
||||
semgrep --config=p/security-audit .
|
||||
```
|
||||
|
||||
### CodeQL
|
||||
|
||||
```bash
|
||||
# 创建数据库
|
||||
codeql database create database --language=java --source-root=.
|
||||
|
||||
# 运行查询
|
||||
codeql database analyze database security-and-quality.qls --format=sarif-latest
|
||||
```
|
||||
|
||||
## 审查清单
|
||||
|
||||
### 输入验证
|
||||
- [ ] 所有用户输入都经过验证
|
||||
- [ ] 使用白名单验证
|
||||
- [ ] 验证数据类型和范围
|
||||
- [ ] 处理特殊字符
|
||||
|
||||
### 输出编码
|
||||
- [ ] HTML输出编码
|
||||
- [ ] URL编码
|
||||
- [ ] JavaScript编码
|
||||
- [ ] SQL参数化
|
||||
|
||||
### 认证授权
|
||||
- [ ] 强密码策略
|
||||
- [ ] 安全的会话管理
|
||||
- [ ] 权限验证
|
||||
- [ ] 多因素认证
|
||||
|
||||
### 加密
|
||||
- [ ] 使用强加密算法
|
||||
- [ ] 密钥安全存储
|
||||
- [ ] 传输加密
|
||||
- [ ] 存储加密
|
||||
|
||||
### 错误处理
|
||||
- [ ] 不泄露敏感信息
|
||||
- [ ] 统一错误响应
|
||||
- [ ] 记录错误日志
|
||||
- [ ] 异常处理
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 1. 安全编码规范
|
||||
|
||||
- 遵循OWASP Top 10
|
||||
- 使用安全编码指南
|
||||
- 代码审查流程
|
||||
- 安全培训
|
||||
|
||||
### 2. 自动化工具
|
||||
|
||||
- 集成SAST工具
|
||||
- CI/CD安全检查
|
||||
- 自动化扫描
|
||||
- 结果分析
|
||||
|
||||
### 3. 代码审查流程
|
||||
|
||||
- 同行审查
|
||||
- 安全专家审查
|
||||
- 定期审查
|
||||
- 记录问题
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 结合工具和人工审查
|
||||
- 关注业务逻辑漏洞
|
||||
- 定期更新工具规则
|
||||
- 建立安全编码文化
|
||||
Reference in New Issue
Block a user