# 安全与访问控制规则 本文件定义了项目的安全约束和访问控制规则。 ## 🔒 禁止访问配置文件 ### 核心约束 **严禁在编码过程中访问根目录下的 `config` 目录下的任何文件**。这包括: 1. **禁止读取** - 不得使用任何方式读取 `config/` 目录下的文件 2. **禁止编辑** - 不得修改 `config/` 目录下的配置文件 3. **禁止查看** - 不得阅读 `config/` 目录下的文件内容 4. **禁止搜索** - 不得在 `config/` 目录下进行任何搜索操作 5. **禁止执行** - 不得在 `config/` 目录下执行任何命令 ### 绝对禁止原则 **即使无法完成任务,也严禁读取 `config/` 目录下的任何文件。** 这是不可妥协的安全红线: - ❌ **禁止**:为了完成任务而读取配置文件 - ❌ **禁止**:以调试为目的查看配置文件 - ❌ **禁止**:以验证配置正确性为由读取文件 - ❌ **禁止**:任何理由、任何借口、任何情况下的访问 **如果任务需要配置信息,必须通过 `src/config/` 模块提供的 API 获取,而不是直接读取文件。** 所有配置读取必须通过集中管理的配置模块(`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. **审计日志记录**:记录违规行为用于审计追踪 6. **立即终止**:任何尝试读取 `config/` 目录的操作将被立即阻止 ### 违规严重程度分类 | 等级 | 违规类型 | 处罚措施 | |------|---------|---------| | 严重 | 故意读取敏感配置文件(如 `.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. **违规通报**:定期通报违规案例以提高安全意识