就是在php上传中防止用欺骗的手段上传,本来允许上传文件的格式是 “jpg”,例如把“txt的文件”后缀改为jpg
它也可以上传的。怎么样可以防止,希望给出代码。
          我用的上传方式很简单的哪一种一下是我用的代码看看怎么改:
<?php 
header("Content-type:text/html;Charset=utf-8");
$uploaddir = dirname(__FILE__)."\\upload\\"; //dirname获得当前文件的路径
$uploadfile = $uploaddir.time().basename($_FILES['upfile']['name']);
$type= $_FILES['upfile']['type'];
if(preg_match("/\\.(jpg|gif|png|bmp|jpeg)$/i",$uploadfile)){
    if($_FILES["upfile"]["size"]<1000000){
  if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
if(move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile)){
               echo "上传成功";
}
else{
echo "上传失败";
}
}
    }
 

解决方案 »

  1.   

    <?php 
    /* 图片上传类 仅限JPG格式图片 */ 
    class uploadFile 

    var $inputName; //input名称 
    var $fileName; //文件命名 
    var $fileProperty; //文件属性 
    var $fileSize=2097152; //文件大小限制,2M 
    var $filePath="upload/"; //文件存储路径 
    function uploadFile($inputName){ 
    $this->inputName=$inputName; 
    $this->getName(); //取得新的名称 
    $this->fileSave(); 

    //随机名称 
    private function getName(){ 
    $this->fileName=date("YmdHms").rand(0,9).$this->getProperty(); 

    //文件属性,返回后辍名 
    private function getProperty(){ 
    if($_FILES[$this->inputName]["type"]=="image/pjpeg"||$_FILES[$this->inputName]["type"]=="image/jpeg"){ 
    return ".jpg"; 
    }else{ 
    exit("文件格式不对"); 


    //文件存储 
    private function fileSave(){ 
    if($_FILES[$this->inputName]["size"]>$this->fileSize){ 
    exit("文件太大,最大限制为".$this->fileSize."字节"); 

    if(!file_exists($this->filePath)){ 
    mkdir($this->filePath); //如果文件存储目录不存在,则建立; 

    move_uploaded_file($_FILES[$this->inputName]["tmp_name"], 
    $this->filePath.$this->fileName); 


    if($_GET['action']=="fileSave"){ 
    $f=new uploadFile("file"); 
    echo '<input name="textfield" type="text" size="30" value="'.$f->filePath.$f->fileName.'" /> 上传成功! <a href="'.$f->filePath.$f->fileName.'">浏览</a>'; 
    }else{ 
    echo '<form action="?action=fileSave" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <input type="file" name="file" size="30" /> 
    <input type="submit" name="Submit" value="提交" /> 
    </form>'; 

    ?> 
    这个你试一下,是从网上看到的。
      

  2.   

    貌似单凭$_FILES里的type值不能判断, 不过有个问题, 即使用户把exe改成jpg上传, 但上传后无法改动后缀就不能运行, 主要是: 一判断$_FILES数组的type是否正确,二是一定要修改上传后的文件名
      

  3.   

    看看 PHP 手册 getimagesize  这个函数,应该能解决你的问题了。
      

  4.   

    if (!getimagesize($_FILES['upfile']['tmp_name'])){
      exit("上传的文件不是图片!");
    }
      

  5.   

    提取被上传文件的前几个字节,判断是不是“? JFIF”