异世界

— 居正 And RUI_wj 's BLOG

最安全的文件(图片)限制上传

代码:
 

  1. <?php

  2. if(($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/pjpeg")&&($_FILES["file"]["size"] < 200000)){

  3.         $type=".jpg";

  4.         if($_FILES["file"]["type"]=="image/gif"){

  5.                 $type=".gif";

  6.         }else{

  7.                 $type=".jpg";

  8.         }

  9.         $name=$_FILES["file"]["name"];

  10.         //echo "##name:" . $name . "<br>";

  11.         if(strpos($name,";")){

  12.                 die();

  13.         }

  14.         //echo "##wait:" . $wait . "<br />";

  15.         $wait=explode(".",$name);

  16.         $okname=$wait[0];

  17.         echo "##name[0]:" . $wait[0] . "<br />";

  18.         $okname=$okname . $type;

  19.         mkdir("./upload");

  20.         echo "##type:" . $type . "<br />";

  21.         echo "##okname:" . $okname . "<br />";

  22.         echo "Upload: " . $_FILES["file"]["name"] . "<br />";

  23.         echo "Type: " . $_FILES["file"]["type"] . "<br />";

  24.         echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

  25.         echo "Stored in: " . $_FILES["file"]["tmp_name"];

  26.         move_uploaded_file($_FILES["file"]["tmp_name"],"./upload/" . $okname);

  27. }

  28.  

  29. ?>

  30. <form action="" method="post" enctype="multipart/form-data">

  31. <input type="file" name="file"><input type="submit">

  32.  

  33. </form>

使用的方法是将整个文件的扩展名改成JPG或GIF。

其中if(strpos($name,";")){
                die();
        }
是为了防止IIS6的解析漏洞,IIS6在解析文件时如果遇到hello.php;112233.jpg这样的文件,会默认解析为hello.php

为什么不直接在整个文件后面加上一个扩展名,像hello.php.rar.mp4.jpg ?
Apache服务器解析时会将如hello.php.avi.jpg这样的文件取第一个“.”,解析成hello.php,所以上面使用了explode方法

 

发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

搭建与于2014/12,RUI_wj 居正 所有。