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

8.6 KiB
Raw Blame 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/ 目录写入代码或配置

违禁行为完整列表

# 禁止:直接读取 .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/')  # 禁止!

违禁命令执行

# 禁止:进入 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"  # 禁止!

合规行为

# 正确:使用配置管理模块
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/ 前缀

🔐 敏感信息处理

禁止的行为

# 禁止:在代码中硬编码密钥
API_KEY = "sk-1234567890abcdef"  # 禁止!

# 禁止:打印敏感信息
print(f"Password: {password}")  # 禁止!

# 禁止:将密钥写入日志
logger.debug(f"API Key: {api_key}")  # 禁止!

合规做法

# 正确:从环境变量获取
import os
API_KEY = os.environ.get('API_KEY')

# 正确:使用配置管理
from src.config.settings import Settings
settings = Settings()
api_key = settings.api_key

🛡️ 安全最佳实践

输入验证

  • 所有外部输入必须经过验证和清理
  • 使用参数化查询防止 SQL 注入
  • 对用户输入进行适当的转义和过滤

依赖安全

  • 定期更新依赖包以修复安全漏洞
  • 使用 pip auditsafety 检查依赖
  • 避免使用已知存在安全问题的包

日志规范

  • 禁止 记录敏感信息(密码、密钥、令牌等)
  • 禁止 记录完整的用户数据(考虑脱敏)
  • 建议 记录操作类型、用户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/ 路径

🔧 合规验证脚本

为确保规则得到遵守,可使用以下验证方法:

# 检查是否有访问 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. 违规通报:定期通报违规案例以提高安全意识