如何验证文件是一个真正的文件"在laravel验证中

时间:2017-11-25 13:20:10

标签: php laravel validation

如何验证图像真的是"图像"或者PDF真的是一个" PDF文档"在上传期间?我观察到黑客尝试上传一些带有jpg扩展名的文件有图片预览,但当我试图在编辑器中打开这个文件时,我看到了PHP代码!! 。

我关注的是:

如何验证文件是否为真实文件?

我使用laravel框架,我测试了图像mimes验证,如下所示:

$inputs = array('image'=>$request->file('file'));
$rules = array(
          'image' => 'mimes:jpeg,jpg,png,gif|required|max:10000'
        );

$validator = Validator::make($inputs, $rules);
    if ($validator->fails()){
        die('validation failed');
    }else{
        die('validation Passed');
    }

但是如果我尝试使用一些php注入的代码上传无效的jpeg文件,那么这个验证总是会通过!!

更新 附加了无效的jpeg文件 enter image description here

2 个答案:

答案 0 :(得分:0)

如果您想验证它是图片,请将“图片”规则添加到$rules数组中:

$rules = array(
      'image' => 'image|mimes:jpeg,jpg,png,gif|required|max:10000'
);

https://laravel.com/docs/master/validation#rule-image

答案 1 :(得分:0)

最后,我决定使用该方法手动检查文件 -  file_get_contents()函数。我不知道这是否是最佳解决方案。等待建议&建议:

public function validateFileContents($file,$needlesArray=null){
    if(empty($needlesArray)){
        $needlesArray = ['<?php','eval','base','gzuncomp'];
    }
    foreach($needlesArray as $needle){
        if( strpos(file_get_contents($file),$needle) !== false) {
            return false;
            break;
        }
    }
    return true;
}