如何验证文件是laravel验证中的“真实文件”
问题描述:
如何在上传过程中验证图像真的是“图像”还是PDF实际上是“PDF文档”?我观察到黑客尝试上传一些带有JPG图片预览的文件,但是当我试图在编辑器中打开这个文件时,我看到了PHP代码! 。如何验证文件是laravel验证中的“真实文件”
我担心的是:
我如何可以验证文件是一个真正的文件?
进出口使用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');
}
但这种验证总是通过,如果我尝试上传无效的JPEG文件与一些PHP注入代码!
答
如果你想验证它是一个图像,添加了 '形象' 的准则对待你$rules
阵列无效的JPEG文件:
$rules = array(
'image' => 'image|mimes:jpeg,jpg,png,gif|required|max:10000'
);
+0
我也试过你的解决方案。但是这证明“无效文件”是有效的。 – Shan
答
最后,我决定使用方法手动检查文件 - file_ge t_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;
}
您可以查看 - > getClientOriginalExtension()原创extenstion –
@bipinpatel,但这种方法只返回已上载 – Shan
文件的扩展名https://*.com/questions/6484307 /如何检查,如果上传文件是一个图像,没有MIME类型 – GoatHater