2016-04-27 6 views
1

Я ограничил свой тип загрузки файла только txt.Реализация типа загрузки файла в Java

FormFile fileObj = null; 

Таким образом, даже если кто-то изменяет файл программы в текстовый файл и пытается загрузить его, я могу фильтровать, что с помощью AutoDetectParser,ParseContext,metadata.

Теперь у меня есть пакетный файл, который после преобразования в txt успешно загружается.

Тип содержимого этого файла является текстовым/равным для txt.

Как я могу ограничить загрузку этого файла? Имеет ли в каждом типе содержимого файла некоторую подпись, на основе которой мы можем различать загруженный файл? Можно ли ограничить этот файл java, пакетный файл после его преобразования в txt?

ответ

1

Предполагаю, что вы говорите о пакетных файлах Windows. У них нет заголовка или другого признака, который бы их точно отличал от «нормальных» текстовых файлов. Пакетные файлы - это, на самом деле, «обычные» текстовые файлы, т. Е. Они обычно являются обычными файлами ASCII. Чтобы обнаружить их, вы могли бы подумать о сколь угодно сложных эвристиках - с переменным успехом - так, нет, вы не можете их достоверно обнаружить.

Вы также не можете «ограничить» пакетные файлы, ну, может быть. Вы можете добавить GOTO :eof в файл или префикс каждой строки REM или ::, что фактически деактивирует что-либо в пакетном файле. Или, может быть, другие трюки.

Но я не совсем уверен, почему вы хотели бы это сделать. В обычном веб-приложении загруженные файлы должны просто храниться в ограниченной части файловой системы и не быть исполняемыми. Если злоумышленник может потенциально запускать загруженный файл любого вида в какой-либо части вашей инфраструктуры, это похоже на архитектурную проблему.

+0

Итак, я полагаю, что если это так для пакетных файлов Windows, все файлы с удобочитаемым контентом будут иметь такую ​​же подпись, как .java, .jsp, .vbs и т. Д. –

+0

@AshutoshSingh: Если под «той же подписью», вы имеете в виду «нет подписи», то в принципе, да, но и не полностью. Например, некоторые файлы разрешают кодирование в Юникоде и * могут * начинаться с [BOM] (https://en.wikipedia.org/wiki/Byte_order_mark). Это подпись, но она не позволяет различать, скажем, .java из .vbs – zb226

+0

Итак, можно ли использовать эту спецификацию, на основе которой мы можем различать типы файлов? Если да, то как? –