安全开发规范
CSRF、权限、上传、XSS、SQL 注入、回调签名和敏感信息规则
安全开发规范
安全规范覆盖后台、会员中心、开放 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,不得覆盖核心认证、上传、权限和回调能力。