档案数据是堂口最敏感的个人信息,也是长期保管的核心资料。 我们把「数据自主、权限清晰、加密到位」作为系统设计的第一原则。
系统私有化部署在教区或堂区自有服务器或电脑,档案数据库不出本机,由堂口自己保管;仅在启用 AI 助手时按最小必要原则传输当次查询所需字段。
所有查询自动附加层级过滤条件,从数据访问层杜绝越权,而非仅靠菜单隐藏。
数据库支持 SQLCipher AES-256-CBC 全库加密;单文件热备份,无需停机。
系统管理员、教区管理员、堂区管理员、堂口管理员四级角色。 关键在于——隔离不是靠「菜单不显示」实现的,而是每一条 SQL 查询都会自动附加层级过滤条件。 堂口管理员在技术上无法取到别堂口的数据,即便直接构造请求也不行。
多教区模式下,各教区会自动物理分库,数据文件彼此独立。
AI 档案助手同样受此约束。查询范围强制取自当前账号权限,与提问方式无关。
| 角色 | 权限范围 | 数据隔离 |
|---|---|---|
| 系统管理员 | 只做系统配置 | 无隔离 |
| 教区管理员 | 管理本教区及下属堂区/堂口 | 仅本教区数据 |
| 堂区管理员 | 管理本堂区及下属堂口 | 仅本堂区数据 |
| 堂口管理员 | 管理本堂口 | 仅本堂口数据 |
账号入口的每一道防线,都按生产系统的标准设置。
密码采用 bcrypt 算法存储,兼容旧版 MD5 并在登录时自动迁移升级。
同一 IP 连续 5 次失败锁定 30 分钟,时长可按堂口需要配置。
无操作超时自动结束会话,防止他人在您离开后操作档案数据。
首次登录或重置密码后,必须修改密码才能继续使用。
HttpOnly + Secure + SameSite=Strict,登录后重新生成 Session 防固定攻击。
登录日志与操作日志完整记录时间、IP、操作人与内容,可追溯导出。
| 安全维度 | 实现方式 |
|---|---|
| SQL 注入防护 | 全部使用 PDO 预处理语句(参数绑定);数据访问层显式禁止数字键拼接 where 条件 |
| XSS 防护 | 所有输出经 htmlspecialchars() 转义 |
| CSRF 防护 | 表单 Token + X-CSRF-Token 请求头双通道校验,时序安全比对 |
| 数据库加密 | SQLCipher 全库 AES-256-CBC 加密(V1.2.2 起) |
| 敏感文件保护 | Nginx / Apache / IIS 三平台伪静态规则,禁止直接访问 .db、.env、.log |
| 目录隔离 | 网站根目录指向 public/,数据库与配置文件位于 Web 可访问范围之外 |
| 错误信息 | 生产环境关闭错误显示(display_errors=0),错误仅写入日志 |
| 安全响应头 | X-Frame-Options、X-Content-Type-Options、Referrer-Policy |
| HTTPS 强化 | HTTPS 环境下自动添加 HSTS 响应头 |
| 应用密钥 | APP_KEY 32 位随机串,用于加密签名 |
安全是双向的。请务必:① 为站点启用 HTTPS 并把 SESSION_SECURE 设为 true;
② 部署后删除 public/ 下的迁移脚本;③ 定期备份并存放到服务器以外。
教籍档案一旦丢失便无法重建,备份是这个系统里最不该省的一步。
SQLite 数据库是单个文件,复制一份就完成备份,不需要导出、不需要停机。
使用 .backup 命令进行热备份,备份期间系统可正常使用。
需要恢复时,用备份文件替换当前数据库文件即可,无额外转换步骤。
建议配置每日 cron 自动备份、保留 30 天,并把备份文件同步到服务器以外的位置。 具体命令参见安装部署章节。