web前端

位置:IT落伍者 >> web前端 >> 浏览文章

浅谈web上存漏洞及原理分析、防范方法


发布日期:2024年07月09日
 
浅谈web上存漏洞及原理分析、防范方法

检测文件类型并且用用户上存文件名保存

代码如下:if(isset($_FILES[img])){$file = save_file($_FILES[img]);if($file===false) exit(上存失败!);echo "上存成功!"$file;}function check_file($img){///读取文件if($img[error]>) return false;$tmpfile = $img[tmp_name];$filename = $img[name];///读取文件扩展名$len=strrpos($filename"");if($len===false) return false;//得到扩展名$ext = strtolower(substr($filename$len+));if(!in_array($extarray(jpgjpegpng))) return false;return true;}function save_file($img){if(!check_file($img)) return false;//格式检测ok准备移动数据$filename = $img[name];$newfile = "upload/" $filename;if(!move_uploaded_file($img["tmp_name"]$newfile)) return false;return $newfile;}?>以上代码对输入类型也做了判断看了没有问题但是问题确恰恰出现在对获取的用户名变量检测上面直接获取传入用户名然后存为文件 有朋友会说这些文件名都是我电脑里面存在的文件名格式都受限于操作系统对文件名定义 但是需要注意是对于$_FILES里面获取变量是直接来自http request请求它跟普通获取其它getpost变量一样 因此别有用心的人往往会自己模拟浏览器给服务器发送一个特殊文件名然后让存文件时候能够正常保存为自己格式前些年”” 在字符串中保存为文件会自动截断后面内容$filename 构造为”aphpjpg” 我们想想将会变成怎么样?$newfile = “upload/aphpjpg” 因为对扩展名验证最右边””后面字符是jpg 是允许图片格式 但是我们一以该文件名保存 发现磁盘会在upload目录下面生成aphp 后面所有字符被自动截断该漏洞风靡一时当时几乎大多数上存网站都有漏洞一时很多平台关闭了上存其实根本原因就在此我们拿到文件名自己作为最终生成文件名保存了 好的方法是自己随机生成文件名+读取扩展名 这样可以组织输入特殊字符在进行文件保存时候被抛弃或截断了php时代这个漏洞可以利用到php时代生成的变量文件名值中会自动过滤掉”” 这样无论用户构造怎么样的特殊””用户名都会被截断 但是 目前这类漏洞在aspjsp 等站点还经常有出现老版本的php站点也会经常出现               

上一篇:web上存漏洞及原理分析、防范方法

下一篇:SOA and Web services 新手入门i学习