通过php保护上传者文件

时间:2013-06-03 21:04:44

标签: php upload

我的网站上有一个上传器,当我使用此代码检查文件类型

if($_FILES['fileToUpload']['type']=='image/jpeg' || $_FILES['fileToUpload']['type']=='image/gif' || $_FILES['fileToUpload']['type']=='image/png' )
 {
     $file_Name = time().".".end(explode(".",$_FILES['fileToUpload']["name"]));
     $_FILES["fileToUpload"]["name"] = $file_Name;
       move_uploaded_file(@$_FILES["fileToUpload"]["tmp_name"], "upload/" . @$_FILES["fileToUpload"]["name"]);
$msg .='Your file was uploaded successfully';
}
但是有些黑客他们可以攻击并上传php文件,有没有更多的安全性

注意:当我创建php文件并将其灭绝更改为.jpg时,我上传了将要上传的文件

1 个答案:

答案 0 :(得分:1)

是的,它完全是脆弱的。在$_FILES中,以下参数位于 USER 控件下:

['type']
['name']

伪造上传是非常简单的,允许这样的事情:

['type'] = 'image/jpeg';
['name'] = 'nasty_hacking_script.php';
繁荣,他们通过你的(可笑的)安全。由于您允许用户定义的文件扩展名通过您的系统,并且只进行基于时间的重命名重命名,因此您最终会得到类似

的内容
 1234567890.php

在您网站的文档根目录中。鉴于该名称是基于时间的,攻击者只需简单地捅你的服务器并猜测确切的上传时间是多么微不足道,例如。

 for($i = 1234567800; $i <= 124000000; $i++) {
     see_if_url_exists("$i.php");
 }
直到他们找到他们的剧本。现在他们对您的网站有 TOTAL 控制权,而且很可能也是服务器。

简而言之,您的代码提供的安全性与一张湿卫生纸一样多。这是非常危险的。

相关问题