这一篇偏技术,但建议非技术的负责人也看一遍——因为我们遇到的安全事故里,超过一半是配置问题和弱口令,跟代码水平关系不大。
输入与数据处理(5 项)
- 所有数据库查询使用参数化,禁止字符串拼接 SQL
- 输入内容做类型、长度、格式三重校验,不信任任何前端校验
- 富文本内容在入库前做白名单过滤,只允许安全标签
- 搜索结果、分页参数等看似无害的入口,同样要校验
- 错误信息不回显 SQL 语句、文件路径或堆栈
文件与上传(4 项)
- 上传文件校验扩展名白名单,而不是黑名单
- 同时校验文件 MIME 类型,防止改扩展名绕过
- 上传目录禁止执行脚本权限
- 文件名重命名为随机字符串,不使用用户上传的原始名称
账号与权限(4 项)
- 后台地址不要用 /admin 这类默认路径,能挡掉大量自动化扫描
- 管理员账号不使用 admin、root、123456 等常见弱口令
- 登录接口增加失败次数限制与验证码,防暴力破解
- 检查是否存在水平越权:改一个 ID 参数能不能看到别人的数据
配置与信息暴露(4 项)
- 关闭调试模式,生产环境不显示任何详细报错
- 删除备份文件、测试文件、安装脚本(如 install.php)
- 关闭目录浏览,访问目录不应列出文件列表
- 检查 .git、.env、.svn 等敏感目录能否被直接下载
上线后还要做什么
清单过一遍不代表永久安全。我们建议至少做到这三点:
- 每周检查一次框架与依赖的更新公告
- 开启异地自动备份,并定期做一次恢复演练
- 给域名配好 HTTPS,并保证自动续期
最后提醒一句:如果网站用的是来源不明的模板或插件,上面的检查只能防住表面问题。最稳妥的做法是把它替换掉。
这篇就先写到这。有具体场景想讨论,直接打电话比留言快。