Files
ProStock/.kilocode/rules/security_rules.md

272 lines
8.6 KiB
Markdown
Raw Normal View History

# 安全与访问控制规则
本文件定义了项目的安全约束和访问控制规则。
## 🔒 禁止访问配置文件
### 核心约束
**严禁在编码过程中访问根目录下的 `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. **违规通报**:定期通报违规案例以提高安全意识