Files
ProStock/.kilocode/rules/security_rules.md
liaozhaorun e625a53162 feat: 初始化 ProStock 项目基础结构和配置
- 添加项目规则文档(开发规范、安全规则、配置管理)
- 实现数据模块核心功能(API 客户端、限流器、存储管理、配置加载)
- 添加 .gitignore 和 .kilocodeignore 配置
- 配置环境变量模板
- 编写 daily 模块单元测试
2026-01-31 03:04:51 +08:00

272 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 安全与访问控制规则
本文件定义了项目的安全约束和访问控制规则。
## 🔒 禁止访问配置文件
### 核心约束
**严禁在编码过程中访问根目录下的 `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. **违规通报**:定期通报违规案例以提高安全意识