第三十七章 安全加固
安全加固分四层:目录与文件访问、后台入口与账号、对外入口、备份与可恢复;附配置项清单与上线前检查单。
这一章解决什么
安全加固不是装一个插件就完事,而是四层各挡一段:服务器挡住不该下载的文件、后台挡住不该进来的人、表单挡住乱填与刷接口、数据与配置留好可恢复的底。本章按这四层给出本站已经生效的配置,以及还需要人工维护的部分。
本章的检查项全部是「看清楚再动」。改 web.config、改角色、改 IP 规则都可能让站点或后台立刻不可用;操作前先备份对应文件与数据库。
第一层:目录与文件访问
站点根与九个目录各有一份 web.config,IIS 就近生效。它们的作用是让「知道路径」也下载不到敏感文件。
| 位置 | 拦截内容 | 效果 |
|---|---|---|
| 站点根 | .mdb .ldb .bak .log .dmp .sql | 数据库、锁文件、备份、日志、导出文件一律 403 |
| 站点根 | 移除 X-Powered-By;关闭目录浏览;DetailedLocalOnly | 响应头不暴露技术栈;目录不列文件;详细错误只在本机显示 |
data/ | 全部请求 HttpForbiddenHandler | 数据库目录整体不可访问 |
cache/ log/ | 全部请求禁止 | 缓存与日志不对外 |
lib/ | *.asp 禁止 | 类文件不能被直接请求执行 |
ju7/ | 七个入口/公共文件禁止 | base.asp、布局片段等不能被单独打开 |
manage/ | *.html 禁止 | 后台模板不能直接下载 |
theme/ plug/ | config.xml、update.xml、*.html;插件目录另禁库/备份/日志 | 模板源码与安装包不外泄 |
upfile/ | 只允许 StaticFileModule 读取;加 nosniff | 上传目录里的文件只当静态文件发,不会被当脚本执行 |
静态资源的缓存策略也在这里:css/js 缓存 30 天,图片与字体 7 天。HTML 页面则显式 no-cache,避免坏页面粘在访客浏览器里。
第二层:后台入口与账号
| 机制 | 位置 | 说明 |
|---|---|---|
| 登录校验 | islogin | 每个后台页开头调用;未登录直接跳登录页 |
| 页面级权限 | checkpagelever | 按当前账号角色能看哪些菜单行判断;菜单行按 admin_menu.url 反查,不写死编号 |
| 超级管理员 | admingroupid=0 | 只有超级管理员能升级、授权等敏感操作 |
| 七天自动登录 | 登录页复选框 | 发一个带期限的令牌;公共电脑不要勾 |
| 操作日志 | 设置 → 操作日志 | 记录谁在什么时候改了什么,排障与追责都用它 |
账号必须做的四件事
- 删除或停用离职人员账号,不要只改密码。
- 按岗位建角色,只勾需要的菜单;编辑不需要「模板管理」「数据库设置」「授权系统」。
- 超级管理员只留一到两个,日常操作用普通管理员。
- 定期看操作日志与错误记录,异常登录、频繁 403、突然的大量删除都要追。
第三层:对外入口
访问限制(IP 封禁与限速)
后台:功能 → 访问限制。规则存在 plug_ipaccess 表,分「全站规则(classid=0)」与「栏目规则」两类:
- 全站规则支持授权名单 / 禁止名单,并可用「窗口秒 + 阈值」做限速;
- 栏目规则可单独限制某个栏目,适合只保护留言或搜索结果;
- 命中后返回统一的 403 提示页,不会把 ASP 错误细节暴露给访客。
如果站点前面有 CDN 或反向代理,必须配置 ip_proxy(可信代理)并只信任它转发的 X-Forwarded-For;否则所有访客看到的都是代理 IP,封一个等于封全站。ip_proxy 留空时系统只认 REMOTE_ADDR,本机测试永远看到 127.0.0.1。
留言与表单
- 手机号字段可开短信验证码;服务端要三个条件全成立才验码:短信插件已装、插件配置「是否开启」为真、该字段勾了「开启验证码」。
- 发码按号码计费,并有 60 秒间隔、单 IP 与单号码总量三道限额,都在短信插件的服务端。
- 表单提交走
/comment/form/,字段名与表单 ID 必须对得上;改模板时不要改name与隐藏的classid。
禁用词
后台:功能 → 禁用词检查。插件自带一份预置词表,可勾选入库;内容保存时按启用词检查并提示。它是「提示 + 记录」,不是自动改写正文;是否要替换由编辑决定(功能 → 内容替换)。
第四层:备份与可恢复
| 备份 | 产生时机 | 位置 |
|---|---|---|
| 手动数据备份 | 功能 → 数据备份 | data/databackup/ |
| 升级前备份 | 执行升级包前自动 | data/databackup/pre-migrate-<时间>.bak |
| 整站回灌前备份 | 点「整站回灌」前自动 | pre-apply-<时间>.bak 与 upfile-preapply-*、block-preapply-* |
备份要满足两个条件才算数:存到站点目录之外(或至少定期下载走),以及真的恢复过一次。只备份不演练,出事时才发现文件是空的,这种例子很常见。
配置里的秘密
短信的 AccessKey/Secret、邮件密码、数据库路径等都在数据库配置或 config/ 下。加固要求:
- 不要把这些值贴进聊天工具、工单或文档;截图前先遮挡。
- 只给程序需要的权限:短信子账号只给发送与查询,不给费用中心写权限。
- 人员变动或怀疑泄露时立即轮换密钥,再更新后台配置。
- 数据库目录已被
data/web.config整体禁止访问,但仍不要把.mdb放进upfile/或主题目录。
上线前的最小检查单
- 根目录
web.config存在,/data/#Andvar_com.mdb直接访问返回 403。 /ju7/base.asp、/theme/576so/config.xml直接访问返回 403。- 未登录访问任意后台页,跳到登录页而不是报错页。
- 用普通管理员登录,确认看不到「授权系统」「数据库设置」等未授权菜单。
- 后台「错误记录」没有持续新增的 500;「操作日志」有当天的登录与修改记录。
- 数据备份能生成、能下载,且知道怎么恢复。
接下来怎么读
- 升级包怎么校验、怎么回滚:第三十八章。
- 授权与到期提醒:第三十六章。
- 已经出问题时的排查入口:第四十章与第四十四章。
微信扫码聊需求