你不知道的文件上传漏洞php代码分析(2)

<?php require_once 'DB.php'; $uploaddir = 'D:/uploads/'; $id = $_GET['id']; if(!is_numeric($id)) {   die("File id must be numeric"); } $db =& DB::connect("mysql://root@localhost/db"); if(PEAR::isError($db)) {   die("Error connecting to the database"); } $file = $db->getRow('SELECT name, mime_type FROM uploads WHERE id=?',array($id), DB_FETCHMODE_ASSOC); if(PEAR::isError($file)) {   die("Error fetching data from the database"); } if(is_null($file) || count($file)==0) {   die("File not found"); } header("Content-Type: " . $file['mime_type']); readfile($uploaddir.$file['name']); ?>

上述代码文件名随机更改,文件被存储在web root之外,用户通过id在数据库中查询文件名,读取文件,可以有效的阻止上述漏洞发生

总结

通过以上示例分析,可总结一下几点

1.文件名修改,不使用用户上传的文件名

2.用户不可以通过上传路径直接访问文件

3.文件查看采用数据库获取文件名,从而在相应文件服务器读取文件

4.文件上传限制文件大小,个人上传数量等

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1492b8badf90988f04c0357603844d2c.html