Вы должны проверить тип файла на обоих концах.
В rails я нашел два наиболее эффективных метода Ruby FileMagic:
https://github.com/blackwinter/ruby-filemagic
Или путем выделения типа файла:
file -b --mime-type myfile.pdf
=> application/pdf
Вы должны установить белый список типов файлов в вашем контроллере / службе, которую может использовать ваш контроллер, которая утверждает, что тип файла является действительным, сравнивая выходные данные одного из двух инструментов, перечисленных выше, с вашим белым списком типов файлов и расширение файла, который вы получили.
В интерфейсе вы можете сделать что-то вроде следующего, используя jQuery:
var allowedExtension = ["txt", "pdf"];
$.each(inputFile.files, function() {
extName = this.name.split('.').pop();
if ($.inArray(extName, allowedExtension) == -1) {extError=true;};
})
Причина этого двоякая:
На стороне клиента легко и быстро сделать базовое утверждение о типе файла. Это означает, что пользователи получают обратную связь как можно скорее, а не совершают целый круговой переход от клиента к серверу, чтобы понять, что их тип файла подходит.
Проверка на стороне сервера важна, потому что наша интерфейсная реализация довольно наивна и ее легко обойти. Наличие проверки на бэкэнде делает ваше приложение более надежным.