Laravel 5安全上传文档文件

时间:2015-10-13 14:53:51

标签: php security file-upload laravel-5

在这种情况下我想安全上传isSubscriber以防止任意文件上传,特别是Web shell或任何恶意脚本。

问题是如何验证文件,上传是否安全?防止像篡改数据一样改变mime类型,使用多个扩展名重命名文件,使用pdf, doc, docx, ppt, pptx, xls, xlsx, rar, zip和文件名中的空格,小写和大写文件扩展名等等。

我的控制器代码看起来像这样

;

}

1 个答案:

答案 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视频中提取的。我将环顾四周,看看能不能找到它。