文件操作类漏洞防御总结
一、文件包含
1.配置open_basedir,限制访问目录的范围
2.包含文件用户不可控,直接写在代码中
3.包含的文件最好是确定的,尽量不要用变量,即便变量来源不是用户
4.检测用户输入的参数
5.过滤. /等危险的特殊字符
6.allow_url_include=Off ,关闭远程包含(默认为Off)
7.使用白名单限制
二、文件上传
1.前后端都要校验MIME类型和后缀名
2.后缀名都要先转换为小写再校验
3.使用白名单限制
4.去掉文件名前后的空格等特殊字符
5.图片文件使用二次渲染并另存
6.对上传的文件要先重命名然后再移动,避免条件竞争
7.上传文件目录的权限设置为不可执行
三、文件下载
1.过滤特殊字符(点),不允许用户通过url回溯上级目录
2.正则表达式严格判断用户输入参数
3.php.ini中配置open_basedir 限定访问文件范围
4.将文件路径保存到数据库中,通过url?id=111的方式下载