记一次发布疏忽造成源码暴露(.svn)隐患

说明:
公司有个自己开发的PHP项目,平时测试环境部署的步骤是:
Step1:代码从SVN checkout到本地的某个目录;
Step2:通过rsync排除掉.svn目录、上传目录等后发送到web根目录;
当然这些都是用脚本自动执行(也可以结合svn hook自动部署,不详述)。
隐患产生原因:
有次特殊需求单独手动更新了某个文件夹(假设为article目录)的代码,手动同步时忘记排除掉.svn目录,造成了源码暴露隐患:
假如某请求的URL为:http://www.example.com/article/index.php
这种情况下通过http://www.example.com/article/.svn/text-base/index.php.svn-base是可以下载到源码的。
修复方法:
1、删除web目录.svn文件夹:
find /opt/html/  -name .svn -type d  -print |xargs rm -rf
2、nginx排除过滤包含./svn/的请求:
将如下代码插入到nginx配置文件中的server{}模块
# Filter request that contains /.svn/
location ~ ^(.*)\/\.svn\/
{
deny all;
}
备注:
location的模块匹配时有先后顺序的,需要把此段代码插入到其他location之前;
建议站点开启禁止通过IP直接访问;
安全无小事,希望各位看官同样引以为戒。

发表评论

电子邮件地址不会被公开。 必填项已用*标注