Может ли проверка изображений Laravel быть подделана как вредоносный файл путем изменения типов mime при попытке асинхронного сохранения изображений? - PullRequest
0 голосов
/ 02 сентября 2018

Я использую корневой экземпляр Vues для сохранения объекта файла в свойстве данных, а затем передаю это свойство другому компоненту следующим образом:

Root

data: {
    imageFile: null,
},

methods: {
    onFileChange: function(e) {
        this.imageFile = e.target.files[0];
    }
}

ExampleComponent.vue

props: ['imgFile'],

data() {
    return {
        internalImageObj: null
    }
}

watch: {
  imageFile: function (newVal) {
    let reader  = new FileReader()
    reader.readAsDataURL(newVal)
    reader.addEventListener('load', () => {
      this.internalImageObj = reader.result
    }, false)  
  }
},

methods: {
    submitFile: function(){ 

        const imageFormData = new FormData();
        imageFormData.append('image', this.imgFile);

        axios({
          method: 'POST',
          url: '/image',
          data: imageFormData,
          headers: {
             'Content-Type': 'multipart/form-data'
          }
        }).then(function (response) {


        this.message = "Your image has been submitted";   

        }.bind(this))
        .catch(function (error) {
          console.log(error);
        });
    }
}

Html

<example-component :img-file="imageFile"></example-component>

Контроллер

public function image(Request $request)
{
    $request->validate([
        'image' => 'image',
    ]);

    //Store image
}

Я почти уверен, что Laravel использует типы пантомимы, чтобы судить, является ли файл изображением при проверке. Не могу ли я просто перехватить объект File где-нибудь в этом процессе и изменить тип mime на образ, позволяющий выполнять потенциально опасный файл на моем сервере?

Может кто-нибудь объяснить, как и почему это может или не может быть возможно, и что можно сделать с этим? Как именно защитник изображения laravels защитит от этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...