1

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

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 然后我上传将上传的文件

4

1 回答 1

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");
 }

直到他们找到他们的剧本。现在他们可以完全控制您的网站,而且很可能还有服务器。

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

于 2013-06-03T21:24:04.113 回答