- 添加项目规则文档(开发规范、安全规则、配置管理) - 实现数据模块核心功能(API 客户端、限流器、存储管理、配置加载) - 添加 .gitignore 和 .kilocodeignore 配置 - 配置环境变量模板 - 编写 daily 模块单元测试
272 lines
8.6 KiB
Markdown
272 lines
8.6 KiB
Markdown
# 安全与访问控制规则
|
||
|
||
本文件定义了项目的安全约束和访问控制规则。
|
||
|
||
## 🔒 禁止访问配置文件
|
||
|
||
### 核心约束
|
||
|
||
**严禁在编码过程中访问根目录下的 `config` 目录下的任何文件**。这包括:
|
||
|
||
1. **禁止读取** - 不得使用任何方式读取 `config/` 目录下的文件
|
||
2. **禁止编辑** - 不得修改 `config/` 目录下的配置文件
|
||
3. **禁止查看** - 不得阅读 `config/` 目录下的文件内容
|
||
4. **禁止搜索** - 不得在 `config/` 目录下进行任何搜索操作
|
||
5. **禁止执行** - 不得在 `config/` 目录下执行任何命令
|
||
|
||
所有配置读取必须通过集中管理的配置模块(`src/config/`)进行。**`config/` 与 `src/config/` 是完全不同的目录,前者受保护,后者是配置模块代码目录**。
|
||
|
||
### 目录结构说明
|
||
|
||
```
|
||
ProStock/
|
||
├── config/ # 受保护的配置文件目录(禁止任何访问)
|
||
│ ├── .env.example # 环境变量模板
|
||
│ ├── .env.local # 本地环境配置(敏感)
|
||
│ ├── config.yaml # 通用配置
|
||
│ └── ...
|
||
├── src/config/ # 配置模块代码目录(仅限模块内部访问)
|
||
│ ├── __init__.py
|
||
│ ├── settings.py # 配置加载逻辑
|
||
│ └── ...
|
||
└── ...
|
||
```
|
||
|
||
### 受限制工具完整列表
|
||
|
||
所有以下工具均**严格禁止**访问 `config/` 目录:
|
||
|
||
| 工具类别 | 受限制工具 | 禁止操作 |
|
||
|---------|-----------|---------|
|
||
| 文件读取 | `read_file` | 读取 `config/` 目录下任何文件 |
|
||
| 文件读取 | `list_files` | 列出 `config/` 目录内容 |
|
||
| 文件编辑 | `edit_file` | 编辑 `config/` 目录下任何文件 |
|
||
| 文件编辑 | `search_and_replace` | 替换 `config/` 目录下文件内容 |
|
||
| 文件编辑 | `write_to_file` | 写入 `config/` 目录(新建或覆盖) |
|
||
| 文件编辑 | `delete_file` | 删除 `config/` 目录下任何文件 |
|
||
| 搜索工具 | `search_files` | 在 `config/` 目录下进行正则搜索 |
|
||
| 命令执行 | `execute_command` | 执行任何涉及 `config/` 目录的命令 |
|
||
| 代码模式 | 所有代码写入操作 | 向 `config/` 目录写入代码或配置 |
|
||
|
||
### 违禁行为完整列表 ❌
|
||
|
||
```python
|
||
# 禁止:直接读取 .env 文件
|
||
import dotenv
|
||
dotenv.load_dotenv('config/.env') # 禁止!
|
||
|
||
# 禁止:直接读取配置文件
|
||
with open('config/settings.json', 'r') as f: # 禁止!
|
||
config = json.load(f)
|
||
|
||
# 禁止:硬编码配置路径
|
||
config_path = os.path.join('config', 'database.yml') # 禁止!
|
||
|
||
# 禁止:使用 read_file 工具查看 config 文件
|
||
read_file(path='config/.env') # 禁止!
|
||
|
||
# 禁止:使用 edit_file/search_and_replace 编辑 config 文件
|
||
edit_file(path='config/settings.py', ...) # 禁止!
|
||
|
||
# 禁止:使用 search_files 搜索 config 目录
|
||
search_files(path='config', regex='.*') # 禁止!
|
||
|
||
# 禁止:使用 list_files 列出 config 目录
|
||
list_files(path='config', recursive=True) # 禁止!
|
||
|
||
# 禁止:使用 write_to_file 创建或修改 config 文件
|
||
write_to_file(path='config/custom.py', ...) # 禁止!
|
||
|
||
# 禁止:使用 delete_file 删除 config 文件
|
||
delete_file(path='config/old.env') # 禁止!
|
||
|
||
# 禁止:Python 文件系统操作
|
||
import os
|
||
os.listdir('config') # 禁止!
|
||
os.path.exists('config/.env') # 禁止!
|
||
os.path.isfile('config/settings.yaml') # 禁止!
|
||
os.walk('config') # 禁止!
|
||
|
||
# 禁止:pathlib 操作
|
||
from pathlib import Path
|
||
Path('config/.env').read_text() # 禁止!
|
||
Path('config').iterdir() # 禁止!
|
||
|
||
# 禁止:glob 模式匹配
|
||
import glob
|
||
glob.glob('config/**/*') # 禁止!
|
||
glob.iglob('config/*.yaml') # 禁止!
|
||
|
||
# 禁止:shutil 操作
|
||
import shutil
|
||
shutil.copy('config/.env', 'backup/') # 禁止!
|
||
```
|
||
|
||
### 违禁命令执行 ❌
|
||
|
||
```bash
|
||
# 禁止:进入 config 目录
|
||
cd config # 禁止!
|
||
|
||
# 禁止:列出 config 目录
|
||
ls config/ # 禁止!
|
||
dir config # 禁止!
|
||
|
||
# 禁止:读取 config 文件
|
||
cat config/.env # 禁止!
|
||
type config\.env # 禁止!
|
||
|
||
# 禁止:搜索 config 目录
|
||
grep -r "SECRET" config/ # 禁止!
|
||
|
||
# 禁止:任何 config 目录相关命令
|
||
find config -name "*.py" # 禁止!
|
||
```
|
||
|
||
### 合规行为 ✅
|
||
|
||
```python
|
||
# 正确:使用配置管理模块
|
||
from src.config.settings import Settings
|
||
settings = Settings()
|
||
db_config = settings.database
|
||
|
||
# 正确:配置模块内部处理
|
||
from src.config import get_config
|
||
config = get_config()
|
||
```
|
||
|
||
### 配置文件保护规则
|
||
|
||
1. **`config` 目录**:根目录下的 `config/` 目录**完全受保护**,禁止任何工具访问
|
||
2. **`src/config` 目录**:配置模块代码目录,仅限 `src/config/` 内部代码访问
|
||
3. **敏感文件**:`.env` 文件必须添加到 `.gitignore`
|
||
4. **配置加载**:必须在应用启动时一次性加载,而非在运行时多次读取
|
||
5. **工具调用限制**:所有工具调用必须验证目标路径不包含 `config/` 前缀
|
||
|
||
## 🔐 敏感信息处理
|
||
|
||
### 禁止的行为
|
||
|
||
```python
|
||
# 禁止:在代码中硬编码密钥
|
||
API_KEY = "sk-1234567890abcdef" # 禁止!
|
||
|
||
# 禁止:打印敏感信息
|
||
print(f"Password: {password}") # 禁止!
|
||
|
||
# 禁止:将密钥写入日志
|
||
logger.debug(f"API Key: {api_key}") # 禁止!
|
||
```
|
||
|
||
### 合规做法
|
||
|
||
```python
|
||
# 正确:从环境变量获取
|
||
import os
|
||
API_KEY = os.environ.get('API_KEY')
|
||
|
||
# 正确:使用配置管理
|
||
from src.config.settings import Settings
|
||
settings = Settings()
|
||
api_key = settings.api_key
|
||
```
|
||
|
||
## 🛡️ 安全最佳实践
|
||
|
||
### 输入验证
|
||
|
||
- 所有外部输入必须经过验证和清理
|
||
- 使用参数化查询防止 SQL 注入
|
||
- 对用户输入进行适当的转义和过滤
|
||
|
||
### 依赖安全
|
||
|
||
- 定期更新依赖包以修复安全漏洞
|
||
- 使用 `pip audit` 或 `safety` 检查依赖
|
||
- 避免使用已知存在安全问题的包
|
||
|
||
### 日志规范
|
||
|
||
- **禁止** 记录敏感信息(密码、密钥、令牌等)
|
||
- **禁止** 记录完整的用户数据(考虑脱敏)
|
||
- **建议** 记录操作类型、用户ID(不含敏感字段)、时间戳
|
||
|
||
### 错误处理
|
||
|
||
- 禁止向用户暴露详细的错误堆栈
|
||
- 敏感错误应记录到安全日志,而非返回给客户端
|
||
- 使用通用的错误消息对外展示
|
||
|
||
## ⚠️ 违规处理
|
||
|
||
### 自动检测机制
|
||
|
||
1. **提交前扫描**:使用 Git hooks 自动扫描提交内容
|
||
2. **CI/CD 流水线检测**:在持续集成流程中运行安全扫描
|
||
3. **静态代码分析**:集成静态分析工具检测违规模式
|
||
4. **工具调用监控**:监控所有工具调用是否涉及 `config/` 目录
|
||
|
||
### 惩罚机制
|
||
|
||
违反上述规则将导致:
|
||
|
||
1. **代码审查不通过**:提交将被自动拒绝
|
||
2. **安全扫描工具报警**:触发安全警报通知
|
||
3. **安全漏洞评级**:标记为高优先级安全漏洞
|
||
4. **构建阻断**:CI/CD 流水线自动失败
|
||
5. **审计日志记录**:记录违规行为用于审计追踪
|
||
|
||
### 违规严重程度分类
|
||
|
||
| 等级 | 违规类型 | 处罚措施 |
|
||
|------|---------|---------|
|
||
| 严重 | 故意读取敏感配置文件(如 `.env`) | 代码审查拒绝、团队通知 |
|
||
| 高 | 使用工具访问 `config/` 目录 | 代码审查拒绝、要求整改 |
|
||
| 中 | 在代码中硬编码配置路径 | 要求修改、代码审查标记 |
|
||
| 低 | 潜在风险操作(需人工审核) | 代码审查提醒 |
|
||
|
||
## 📋 规则检查清单
|
||
|
||
### 提交前检查
|
||
|
||
- [ ] 没有使用任何工具访问 `config/` 目录
|
||
- [ ] 没有硬编码的 `config/` 目录路径
|
||
- [ ] 配置文件仅通过配置模块访问
|
||
- [ ] 没有硬编码的敏感信息
|
||
- [ ] 敏感信息从环境变量或安全存储获取
|
||
- [ ] 日志不包含敏感数据
|
||
- [ ] 错误处理不暴露敏感信息
|
||
|
||
### 工具调用检查
|
||
|
||
- [ ] `read_file` 未调用 `config/` 目录
|
||
- [ ] `edit_file` 未指向 `config/` 目录
|
||
- [ ] `write_to_file` 未写入 `config/` 目录
|
||
- [ ] `delete_file` 未删除 `config/` 目录
|
||
- [ ] `search_files` 未搜索 `config/` 目录
|
||
- [ ] `list_files` 未列出 `config/` 目录
|
||
- [ ] `execute_command` 未涉及 `config/` 路径
|
||
|
||
## 🔧 合规验证脚本
|
||
|
||
为确保规则得到遵守,可使用以下验证方法:
|
||
|
||
```bash
|
||
# 检查是否有访问 config 目录的代码
|
||
grep -r "config/\." --include="*.py" src/ tests/ docs/
|
||
|
||
# 检查工具调用中的 config 路径
|
||
grep -rn "path='config" --include="*.py"
|
||
|
||
# 检查是否有 .env 文件被提交
|
||
git ls-files | grep "^config/.env"
|
||
```
|
||
|
||
## 📝 培训与文档
|
||
|
||
1. **新成员培训**:入职时必须学习本安全规则
|
||
2. **定期审计**:每月进行一次安全规则执行情况审计
|
||
3. **规则更新**:安全规则随项目演进定期更新
|
||
4. **违规通报**:定期通报违规案例以提高安全意识
|