如何保护这个从LFI上传php

时间:2013-07-05 01:31:54

标签: php deface

<?php

    if($_POST){

        $imagentipo=$_FILES['imagen']['type'];
        $check=array("image/gif","image/jpeg","image/png");

        if(in_array($imagentipo,$check)){
            $imagen=$_FILES['imagen']['name'];
            $temp=$_FILES['imagen']['tmp_name'];
            move_uploaded_file($temp,$imagen);
        }
    }
?>
<html>
<body>
    <form action=test.php method=post enctype=multipart/form-data>
        <img src="<?php echo $imagen ?>" width=50 height=50><br>
        <input type=file name=imagen accept="image/*"><br>
        <input type=submit name=lol>
    </form>
</body>
</html>

此代码仅允许上传.jpg .gif .png文件;但是,这可以通过篡改数据绕过。有什么方法可以防止这种情况吗?

1 个答案:

答案 0 :(得分:1)

将上传的文件移到Web根目录之外,并使用图像处理库中的函数来检查上传的文件是否确实是图像。像Imagick一样:

try{
  $image = new Imagick($filePath);
}catch(Exception $e){
  // fail
}

如果您没有Imagick:

if(getimagesize($filePath) === false){
  // fail...
}