安全

系统安全

rsSites 从网络防护、认证会话、文件隔离到数据安全,提供多层防护——出了事查得到谁在什么时候做了什么,误操作也能恢复,出问题时经得起交代。

🛡️ 网络防护与限流

分层限流

入口层限流面向高频无意图请求,业务层防护面向有攻击意图的行为,双保险保障服务稳定

登录失败阈值锁定

超过失败次数后自动锁定账号,有效防止暴力破解。锁定按 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 编译期校验)、部署形态(单二进制最小依赖)这些架构层面的决策,而非运行时加过滤层。防线前置到编译期,比运行时补救更可靠。