如何验证图像真的是"图像"或者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文件,那么这个验证总是会通过!!
答案 0 :(得分:0)
如果您想验证它是图片,请将“图片”规则添加到$rules
数组中:
$rules = array(
'image' => 'image|mimes:jpeg,jpg,png,gif|required|max:10000'
);
答案 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;
}