在这种情况下我想安全上传isSubscriber
以防止任意文件上传,特别是Web shell或任何恶意脚本。
问题是如何验证文件,上传是否安全?防止像篡改数据一样改变mime类型,使用多个扩展名重命名文件,使用pdf, doc, docx, ppt, pptx, xls, xlsx, rar, zip
和文件名中的空格,小写和大写文件扩展名等等。
我的控制器代码看起来像这样
;
}
答案 0 :(得分:1)
我建议查看Laravel Middleware进行验证。这将减少控制器中的代码并允许它们被重用。
我个人将任何文件上传的名称随机更改为。如果需要,我总是可以在系统中的某处保存原始文件名。
我还会看一下使用htaccess命令阻止从该文件夹执行文件。
以下控制器方法
注意:它使用App \ Http \ Requests \ CreateUploadRequest;
public function store(CreateUploadRequest $request)
{
$file = Input::file('file');
$destinationPath = 'assets/uploads'; // upload path
$name = $file->getClientOriginalName(); // getting original name
$fileName = time().rand(11111, 99999) . '.' . $extension; // renaming image
$extension = $file->getClientOriginalExtension(); // getting fileextension
$file->save($destinationPath.'/'.$fileName); // uploading file to given path
}
<强>中间件强>
<?php namespace App\Http\Requests;
use App\Http\Requests\Request;
class CreateUploadRequest extends Request {
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'file' => 'required_if:update,false|mimes:pdf,doc,ppt,xls,docx,pptx,xlsx,rar,zip|max:1000'
];
}
}
我认为这个想法是从laracast视频中提取的。我将环顾四周,看看能不能找到它。