源码安全常被忽视,却是攻击者最先试探的环节。一个残留的 .git 目录或备份文件,就可能让整站数据暴露。以下加固措施按优先级排列。
清理暴露的源码与备份文件
部署后立即删除或移出 Web 根目录的文件包括:.git、.svn、.env、composer.json、package.json、.sql、.zip、.bak、.swp。Web 服务器应拦截对这些路径的访问。Nginx 可在 server 块中加入:
location ~ /\.(git|svn|env) { deny all; }
location ~* \.(sql|bak|zip|swp)$ { deny all; }
Apache 则通过 .htaccess 的 规则限制。注意:仅靠改名不够,文件仍可能被字典扫描命中。
关闭生产环境的调试与错误回显
开发阶段的详细报错会泄露绝对路径、数据库账号、框架版本。上线前确认:APPDEBUG=false、displayerrors=Off、log_errors=On。错误日志写入 Web 目录之外,避免通过 URL 直接读取。框架自带的调试工具栏(如 Debugbar)必须移除或禁用。
收紧文件与目录权限
遵循最小权限原则:Web 目录属主设为运行用户,权限 755;文件 644;上传目录禁止执行脚本。禁止 777。以 Nginx 为例,在上传目录 location 中加 location ~* /uploads/.*\.(php|jsp|asp)$ { deny all; }。同时关闭目录索引:autoindex off;。
隔离敏感配置与密钥
数据库密码、API 密钥、支付私钥不要硬编码在源码中,更不要提交到代码仓库。使用环境变量或独立配置文件,并将该文件放在 Web 根目录之外。若使用 .env,确保其不被 Web 访问,且加入 .gitignore。已泄露的密钥应立即轮换,不要只删除记录。
管理依赖组件与版本信息
过时的框架、CMS 插件、JS 库是常见入口。定期执行依赖审计:PHP 用 composer audit,Node.js 用 npm audit,Python 用 pip-audit。移除源码中暴露版本号的注释和响应头(如 X-Powered-By)。升级前在测试环境验证兼容性,避免直接在生产环境操作。
建立源码变更与审计习惯
所有源码修改走版本控制,禁止直接在服务器上编辑。生产环境部署使用构建产物,不带 .git 目录。开启文件完整性监控,对核心目录的异常改动告警。定期用自动化工具扫描 Web 根目录下的敏感文件与备份残留。
加固不是一次性任务。每次上线新功能、更换服务器、调整 Nginx 配置后,都应重新检查上述五类问题。把源码安全纳入发布流程,比事后补救成本低得多。

