【问题标题】:How to Secure php picture upload system [closed]如何保护php图片上传系统[关闭]
【发布时间】:2012-10-17 09:24:05
【问题描述】:

我想用php制作图片上传系统,我希望用户能够上传 png,jpg 文件,而不是病毒或其他文件。我该怎么做?

【问题讨论】:

    标签: php security upload system image


    【解决方案1】:

    第一步:检查扩展名(扩展名以文件结尾)

    第 2 步:检查 MIME 类型 ($file_info = getimagesize($_FILES['image_file']; $file_mime = $file_info['mime'];)

    只允许你想上传的图片扩展名,这样你就可以加入白名单

    试试类似的东西

    $whitelist = array(".jpeg",".jpg",".png");
    foreach ($whitelist as $item)
        {
    
    
           if(preg_match("/$item\$/i", $_FILES['uploadfile']['name']))
                   {
                       $uploaddir='uploads/uploads_image/';
                       $uploadfilename=mysql_prep(basename($_FILES['uploadfile']['name']));
                        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
                       $iv=  mcrypt_create_iv($iv_size,MCRYPT_DEV_RANDOM);
                       $newname= mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "this is the key",$uploadfilename.time(), MCRYPT_MODE_ECB, $iv);
                       $newfilename=  (bin2hex($newname));
                       $uploadfile=$uploaddir.$newfilename.".png";
                       $access=true;
                   }
        }
    

    如果用户尝试通过黑名单上传其他文件,您也可以阻止用户的IP

    foreach ($blacklist as $item) 
        {
            if(preg_match("/$item\$/i", $_FILES['uploadfile']['name'])) 
                {
                    $network = ip2long("10.12.0.0");
                    $mask = ip2long("255.255.0.0");
                    $ip = ip2long($_SERVER{'REMOTE_HOST'});
                    if (($network & $mask) == ($ip & $mask)) {
                      die("Unauthorized");
                    }
                }
    
    
        }
    

    【讨论】:

    • 你能给我一些流行的代码吗,比如每个人都用它的东西?
    • @BlackshadowBlackshadow 你可以试试phpclasses.org/package/…
    【解决方案2】:
     ($_FILES["file"]["type"] == "image/png")
    

    有关此click here的更多信息

    【讨论】:

    • 你能给我一些流行的代码吗,比如每个人都用它的东西?
    【解决方案3】:
    1st check:-
    //check if contain php and kill it 
     $pos = strpos($filename,'php');
     if(!($pos === false)) {
      die('error');
     }
    
    2nd check:-
    //get the file ext
     $file_ext = strrchr($filename, '.');
    $image_list = array(".jpg",".jpeg",".gif",".png"); 
     if (!(in_array($file_ext, $image_list))) {
            die('not allowed extension,please upload images only');
     }
    
    
    3rd check:-    
    $fileType = $_FILES["uploaded_file"]["type==image/jpeg || image/gif || image/png"];
    
    4th check:-     
    preg_match("/.(gif|jpg|png)$/i", $fileName);
    
    hope these checks solve your problem....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多