TanzCMS开源CMS系统

安全开发规范

CSRF、权限、上传、XSS、SQL 注入、回调签名和敏感信息规则

更新:2026-05-31 03:20:44 浏览:5

安全开发规范

安全规范覆盖后台、会员中心、开放 API、插件回调、上传和模板输出。

一、认证与权限

后台接口必须继承管理员认证和权限校验。会员接口必须判断当前会员身份和资源归属。

不要只依赖前端按钮隐藏来控制权限,服务端必须再次校验。

二、CSRF

后台表单、会员表单和普通 Web POST 请求必须带 CSRF。

<input type="hidden" name="_token" value="{$csrf}">

开放 API 使用 Token 或签名时,可以按接口类型走独立鉴权方案。

三、XSS

普通变量默认安全输出:

{$title}

只有确认内容已经清洗并允许 HTML 时才使用:

{html $content}

后台配置、会员资料、评论、投稿和插件设置都不能默认当作可信 HTML。

四、SQL 注入

查询使用查询构造器、模型或绑定参数。排序字段、筛选字段和操作符必须走白名单。

不推荐:

DB::select('select * from demo where title like "%'.$keyword.'%"');

五、上传安全

上传必须走系统上传能力,至少检查:

  • 文件大小。
  • 扩展名。
  • MIME。
  • 存储目录。
  • 文件名随机化。
  • 是否允许公开访问。

不要让用户决定最终物理路径。

六、外部回调

插件回调必须校验:

  • 签名。
  • 时间戳。
  • 随机串。
  • 事件唯一值。
  • 业务状态。

支付和订单类回调必须幂等,重复通知不能重复发货或重复记账。

七、敏感信息

不要输出或记录:

  • 密码和密码哈希。
  • 完整 Token。
  • AppSecret。
  • 数据库密码。
  • 私钥。
  • 短信验证码明文。

日志中可记录脱敏摘要,便于排查。

八、插件安全边界

插件禁用或卸载后,核心系统不能继续依赖插件类。插件不得直接修改 .env,不得覆盖核心认证、上传、权限和回调能力。