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