Допустим, у меня на сервере разрешена загрузка пдф и пнг/жпег — как мне убедиться что файл, загружаемый через форму, таковым является? Из форм-дата я забираю filename и проверяю расширение, но это не гарантированно правда, переименовать же можно.
Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
Ну переименовали вы zip в pdf и загрузили… дальше что с ним делать?
Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
Нет, не гарантировано т.к. можно соединять 2 и более файлов в один разного типа.
Sitealert
Sly32 : Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
Первые символы, структура файла. В пхп, например есть функции для определения mime. А если разговор про картинки, так вообще можно определить высоту/ширину – если нет таковых, то отлуп.
LEOnidUKG
В самом мануале, в первом комменте есть отличный пример:
Первые символы, структура файла. В пхп, например есть функции для определения mime. А если разговор про картинки, так вообще можно определить высоту/ширину – если нет таковых, то отлуп.
Спасибо, оба варианта подходят) в пайтоне тоже есть либы для этого.
lutskboy
для pdf не знаю. а для картинок тот пример не годится. он миме тип определяет. переименуй расширение и загрузка пройдет
для картинок используйте $info = @getimagesize($file);
Sly32
lutskboy #: для pdf не знаю. а для картинок тот пример не годится. он миме тип определяет. переименуй расширение и загрузка пройдет
пройдет то, что я разрешу, об этом и вопрос. Я привел строку в первом посте с бинарными данными которые приходят. Мне не нужен пример на пхп, Си или пайтона, мне нужно понять принципы передачи данных, кодировку на довольно низком уровне
LEOnidUKG
Sly32 #:
пройдет то, что я разрешу, об этом и вопрос. Я привел строку в первом посте с бинарными данными которые приходят. Мне не нужен пример на пхп, Си или пайтона, мне нужно понять принципы передачи данных, кодировку на довольно низком уровне
Content-Type
Узнаётся не МАГИЧЕСКИМ образом. А вы будете в шоке, а от расширения файла. Дальше идут лишь извращения, как писали выше про размер картинки и т.д.
Опять же, повторюсь, файлы можно скреплять разного типа. Я вам загружу JPG и он будет картинкой на 100%. Далее я переименую файл в zip и это будет архив с файлами 100%
SeVlad
LEOnidUKG #: Узнаётся не МАГИЧЕСКИМ образом. А вы будете в шоке, а от расширения файла.
2. При определённых настройках сервера подмена расширения может сработать (загрузив php-файл c расширением «jpg» можно выполнить php-код) и этот метод — давно известная дыра в безопасности.
Недавняя пугалка про CF7 тому пример. (в данном случае проблема яйца выеденного не стоит, но там описан сам принцип эксплуатации такой уязвимости)
livetv
БОльшая опасность, когда загрузят *.php файл, который определится как рисунок.
timo-71
SeVlad #: загрузив php-файл c расширением «jpg» можно выполнить php-код
Если сервер + кмс более менее настроены для предотвращения этого, то вряд ли.
Sly32
Допустим, у меня на сервере разрешена загрузка пдф и пнг/жпег — как мне убедиться что файл, загружаемый через форму, таковым является? Из форм-дата я забираю filename и проверяю расширение, но это не гарантированно правда, переименовать же можно.
Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
filename="154339705_atkritka_1427242866_110.jpg"rnContent-Type: image/jpegrnrnxffxd8xffxe0x00x10JFIFx00x01x01x00x00x01x00x01x00x00xffxdbx00Cx00x01x01x01x01x01x01x01x01xПервые байты в Content-Type как формируются?
LEOnidUKG
Ну переименовали вы zip в pdf и загрузили… дальше что с ним делать?
Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
Нет, не гарантировано т.к. можно соединять 2 и более файлов в один разного типа.
Sitealert
Интересно, в бинарном коде файла будет гарантировано его тип или там тоже можно подменить?
Первые символы, структура файла.
В пхп, например есть функции для определения mime. А если разговор про картинки, так вообще можно определить высоту/ширину – если нет таковых, то отлуп.
LEOnidUKG
В самом мануале, в первом комменте есть отличный пример:
https://www.php.net/manual/ru/features.file-upload.php
Sly32
Первые символы, структура файла.
В пхп, например есть функции для определения mime. А если разговор про картинки, так вообще можно определить высоту/ширину – если нет таковых, то отлуп.
Спасибо, оба варианта подходят) в пайтоне тоже есть либы для этого.
lutskboy
для pdf не знаю. а для картинок тот пример не годится. он миме тип определяет. переименуй расширение и загрузка пройдет
для картинок используйте $info = @getimagesize($file);
Sly32
для pdf не знаю. а для картинок тот пример не годится. он миме тип определяет. переименуй расширение и загрузка пройдет
пройдет то, что я разрешу, об этом и вопрос. Я привел строку в первом посте с бинарными данными которые приходят. Мне не нужен пример на пхп, Си или пайтона, мне нужно понять принципы передачи данных, кодировку на довольно низком уровне
LEOnidUKG
пройдет то, что я разрешу, об этом и вопрос. Я привел строку в первом посте с бинарными данными которые приходят. Мне не нужен пример на пхп, Си или пайтона, мне нужно понять принципы передачи данных, кодировку на довольно низком уровне
Узнаётся не МАГИЧЕСКИМ образом. А вы будете в шоке, а от расширения файла. Дальше идут лишь извращения, как писали выше про размер картинки и т.д.
Опять же, повторюсь, файлы можно скреплять разного типа. Я вам загружу JPG и он будет картинкой на 100%. Далее я переименую файл в zip и это будет архив с файлами 100%
SeVlad
Узнаётся не МАГИЧЕСКИМ образом. А вы будете в шоке, а от расширения файла.
Ты будешь в шоке, но
1. Файл опознается по MIME.
2. При определённых настройках сервера подмена расширения может сработать (загрузив php-файл c расширением «jpg» можно выполнить php-код) и этот метод — давно известная дыра в безопасности.
Недавняя пугалка про CF7 тому пример. (в данном случае проблема яйца выеденного не стоит, но там описан сам принцип эксплуатации такой уязвимости)
livetv
timo-71
загрузив php-файл c расширением «jpg» можно выполнить php-код
Если сервер + кмс более менее настроены для предотвращения этого, то вряд ли.
Но, и проверять надо: