Php 如何验证文件是否为“文件”;“真实文件”;在拉维验证中

Php 如何验证文件是否为“文件”;“真实文件”;在拉维验证中,php,laravel,validation,Php,Laravel,Validation,如何在上传过程中验证图像是否真的是“图像”或PDF是否真的是“PDF文档”?。我观察到一个黑客试图上传一些带有jpg扩展名的文件,它有一个图片预览,但当我试图在编辑器中打开这个文件时,我看到了php代码 我关注的是: 如何验证文件是否为真实文件 Im使用laravel框架,我使用图像模拟验证进行了测试,如下所示: $inputs = array('image'=>$request->file('file')); $rules = array( 'image' =&

如何在上传过程中验证图像是否真的是“图像”或PDF是否真的是“PDF文档”?。我观察到一个黑客试图上传一些带有jpg扩展名的文件,它有一个图片预览,但当我试图在编辑器中打开这个文件时,我看到了php代码

我关注的是:

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

Im使用laravel框架,我使用图像模拟验证进行了测试,如下所示:

$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文件

如果要验证它是否为图像,请将“图像”规则添加到
$rules
数组中:

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

最后,我决定使用该方法手动检查文件- 文件获取内容()。我不知道这是否是一个最佳的解决方案。等待建议和建议:

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;
}
公共函数validateFileContent($file,$needersarray=null){
if(空($needersarray)){

$needersarray=['您可以检查->getClientOriginalExtension()以获取原始extenstion@bipinpatel,但此方法仅返回已删除的文件的扩展名uploaded@GoatHater我检查了getImageSize(),得到的数组是:,数组([0]=>317[1]=>40[2]=>1[3]=>width=“317”height=“40”[bits]=>6[channels]=>3[mime]=>image/gif)。这似乎对“无效文件”有效。我也尝试了您的解决方案。但这验证了“无效文件”的有效性。