Я использую корневой экземпляр 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 защитит от этого?