🛡️ 网络防护与限流
分层限流
入口层限流面向高频无意图请求,业务层防护面向有攻击意图的行为,双保险保障服务稳定
登录失败阈值锁定
超过失败次数后自动锁定账号,有效防止暴力破解。锁定按 IP 和用户名双维度计数,覆盖两种常见攻击姿势
来源封禁
持续触发限流的来源可被临时或长期封禁,不给攻击者反复试探的机会
图形验证码常驻
所有登录页面始终展示图形验证码,不是失败若干次后才出现,从第一次登录尝试起就有验证码屏障
🔒 认证与会话安全
JWT + Redis 会话登记
服务端可主动作废已签发的凭证——不仅仅是签发 Token 然后等它过期,而是能随时让任何会话失效
在线会话管理
平台管理员可查看当前所有在线会话:谁在登录、什么时候登录的、从什么设备和 IP 来的,一目了然
强制下线(踢人)
支持精准踢掉某一个具体设备的登录,也支持一键踢掉某用户名的全部会话——发现异常活动立刻切断
会话自动超时
会话有明确的过期时间,不依赖客户端主动退出。JWT 有效期与 Redis 会话 TTL 同步对齐,不会出现"JWT 早过期但 Redis 残留"的脏数据
🔧 SQL 注入与 Web 攻击防护
SQL 注入防护:编译期保证
SQLx 在编译阶段校验所有 SQL 语句,参数化查询是编译器的硬约束,从根本上消除 SQL 注入的可能,防护级别高于传统 PHP CMS"拼接后运行时过滤"的方式
XSS 防护
模板引擎自动输出转义,配合 CSP 策略,双重防护跨站脚本攻击
CSRF 攻击面收窄
登录态用 Authorization: Bearer Token 传递,不依赖浏览器自动携带的 Cookie——CSRF 攻击依赖浏览器自动带上凭证,这个前提从认证方式上就不成立
全链路类型安全
从数据库 Schema → Rust 结构体 → API 序列化 → 前端类型,整条链路都是强类型的。非法输入在编译期或请求解析阶段即被拒绝,不会流入业务逻辑
📄 文件上传安全
内容级类型校验
不仅仅检查文件扩展名——还校验文件的实际内容(魔数/MIME 类型),防止攻击者把可执行文件伪装成图片上传
上传目录防执行
上传目录从 Web 服务器层面禁止任何文件被当作可执行内容处理——即使攻击者成功上传了一个恶意脚本,它也不会被执行
非图片强制下载
文档、压缩包等非图片类文件强制以下载方式呈现,不会被浏览器直接解析执行
文件大小限制
上传文件有明确的大小上限(图片 10MB,文档 50MB),防止单个超大文件耗尽磁盘或拖慢服务
📜 模板源码隔离
外部不可达
模板源码从物理层面保证外部不可访问——无论搜索引擎还是直接构造 URL 都无法接触到源码。由 Nginx 层直接拦截对模板目录的请求,不依赖 robots.txt 这类需要爬虫自觉遵守的约定
草稿区 / 归档区不可达
草稿和归档的模板同样从 Web 服务器层面隔离,外部无法通过任何路径访问
发布流程是唯一生效路径
线上生效的正式版本只能通过后台发布流程产生——Git 推送、直接修改文件等绕过后台的任何操作都不能让改动直接上线
👁️ 预览安全
全部预览均需登录态
模板预览、内容预览:所有预览入口都要求管理员已登录,不存在不需要登录就能访问的预览链接
搜索引擎不可收录
预览页面在 HTTP 响应头和 HTML meta 标签层面都明确禁止搜索引擎索引,确保草稿内容不会意外出现在搜索结果中
预览链接不可猜测
预览使用系统生成的临时标识,不可被外部通过枚举或猜测构造出有效链接
🗃️ 数据安全
软删除 + 可恢复
内容、栏目、站点删除后标记为已删除,不立即物理清除,支持在时间窗口内恢复——避免误操作酿成不可逆的数据损失
敏感信息不入仓库
数据库密码、JWT 密钥、Redis 密码等通过环境变量注入,配置文件中只写非敏感项,源代码仓库里永远不会出现生产环境的真实凭据
操作日志永久保留
登录、后台关键操作、内容生命周期变化:全程记录、同步写入、不丢失、不轮转清除。出了事有据可查
备份内置在系统里
数据库全量 + 附件增量的定时/手动备份内置在后台,一键触发、一键恢复,备份记录看得见、管得着。所有备份数据落在自己的服务器上,不依赖任何第三方云服务,异地容灾按需自行配合 rsync 等工具同步
🚀 部署安全
单二进制,最小攻击面
部署一个编译好的二进制文件即可运行。没有 PHP 运行时、没有 Java 虚拟机、没有额外的依赖软件——每一个多出来的组件都是潜在的攻击入口,rsSites 把攻击面压到最低
编译期消除整类 Bug
Rust 的所有权系统和类型检查在编译阶段就消灭了空指针解引用、数据竞争、缓冲区溢出等传统语言中常见的运行时漏洞——这类代码在编译阶段就无法通过,不依赖运行时防护
CLI 信任模型
直接操作数据的 CLI 子命令运行在部署服务器本地,能登录到本机执行命令即视为最高信任级别,不叠加后台 RBAC 校验;调用后台接口的 CLI 桥接则使用专门的命令行账号,走真实的登录会话和 RBAC 权限校验,两种命令的信任边界不同
核心安全理念:rsSites 的安全性来自语言选择(Rust)、数据库交互方式(SQLx 编译期校验)、部署形态(单二进制最小依赖)这些架构层面的决策,而非运行时加过滤层。防线前置到编译期,比运行时补救更可靠。