Web安全开发指南--文件系统
6.1、上传文件功能
简要描述 |
文件上传漏洞是由于文件上传功能实现代码没有对用户上传的文件进行正确处理,导致允许攻击者向服务某个目录上传文件。 |
|
解决方案 |
上传文件功能只对登录用户开放; 同时通过文件头和文件扩展名来判断文件类型; 判断文件类型时尽量使用黑名单的方式,可以使用较粗粒度方式,比如过滤”.php”字串(忽略大小写)来防止php文件的上传; 过滤上传路径或文件名中的NULL字符,防止NULL字符截断; 如果上传的文件为图片,可对图片进行压缩处理再存储; 不要将上传文件的绝对路径返回给客户端; 将上传的文件进行随机命名和重命名; 更新补丁,避免使用有文件解析漏洞的web服务器; 禁止PUT上传,禁用WebDAV; 安装杀毒软件对上传目录的文件进行实时监控。 |
|
备注 |
PHP版本<5.3.4 , 几乎所有的file函数都受NULL截断影响! |
|
6.2、路径遍历
简要描述 |
应用程序包含文件资源是非常常见的事情,但也因此很容易引入漏洞。 |
|
解决方案 |
当检测包含字符”/”或”\”字符时拒绝处理该请求。 尽可能不使用用户输入数据作为文件系统调用的入参; 使用索引而不是用户提供的文件名的方式来存取文件,比如用户提交5,代表foo这个文件,而不是让用户提交foo这个文件名(参考附录11.2.2); 保证用户的输入不能控制一个完整路径中的任何一部分。 |
|
备注 |
|
|
6.3、临时文件
简要描述 |
应用程序偶尔会产生临时文件到文件系统,如果这些文件暴露给未授权的用户,就有可能导致信息泄漏。 |
|
解决方案 |
保证临时文件不允许被未认证用户访问; 执行自动化脚本对临时文件进行定时清理; 如果可能,尽量将临时文件置放在web目录外,防止浏览器强制访问攻击; 对临时文件进行随机化命名,降低浏览器暴力遍历的攻击概率。 |
|
备注 |
|
|
6.4、旧的无效文件
简要描述 |
系统管理人员和开发人员使用编辑器或其它工具后可能会产生一些临时文件,如果这些文件的扩展名或者权限被改变了,就有可能被攻击者读取到其中的数据。 |
|
解决方案 |
在开发中防止应用程序保留文件的备份; 定期检查web目录下的所有文件是不是都是必须的; 保证应用程序产生的临时文件无法通过浏览器访问。 |
|
备注 |
|
如格式显示不正确,建议使用chrome浏览器