Back

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

代码:...

代码:

  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. <form action=”” method=“post” enctype=“multipart/form-data”>
  30. <input type=“file” name=“file”><input type=“submit”>
  31. </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方法

Licensed under CC BY-NC-SA 4.0
-1