安全上传文件的php


secure uploader file by php

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

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

是的,它非常脆弱。在$_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控制你的网站,很可能还有服务器。

简而言之,您的代码提供的安全性就像一张湿卫生纸一样。