Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > CURL: загрузка файлов и безопасность


Автор: PROme2 9.7.2007, 16:35
снова я с вопросами безопасности smile
цель - закачка картинки, урл которой вводит юзер
какие тут могут быть опасности, как фильтровать инфу?
пока я что делаю:
- проверяю, не длиннее ли строка 255 символов
- начинается ли она с 'http://'
- содержит ли 'file:'
что нужно еще сделать? smile 

Автор: ksnk 9.7.2007, 16:44
а зачем? Нужно скачать и проверить mime-type и размер. Размер проще проверять fopen'ом. Скачать 20, к примеру, кил и остановится. Если файл недокачался и/или некорректен - минус в репу юзеру smile
Цитата(PROme2 @  9.7.2007,  16:35 Найти цитируемый пост)
- проверяю, не длиннее ли строка 255 символов
 Строка GET'а может быть существенно больше...

Автор: PROme2 9.7.2007, 17:13
Цитата(ksnk @  9.7.2007,  16:44 Найти цитируемый пост)
Нужно скачать и проверить mime-type и размер.

это само собой
просто проверять может быть уже поздно smile 
и не такое бывает... так что хочу максимально перестраховаться еще до скачки

Цитата(ksnk @  9.7.2007,  16:44 Найти цитируемый пост)
Скачать 20, к примеру, кил и остановится. Если файл недокачался и/или некорректен - минус в репу юзеру

а смысл? непонятно что-то, подробней можно?

Цитата(ksnk @  9.7.2007,  16:44 Найти цитируемый пост)
Строка GET'а может быть существенно больше...

опыт показывает, что ничего хорошего за этим скрываться не будет smile

Автор: ksnk 9.7.2007, 17:50
Цитата(PROme2 @  9.7.2007,  17:13 Найти цитируемый пост)
а смысл? непонятно что-то, подробней можно?
 Юзер может заказать скачку очень большого файла... Кино, какое-нибудь, лечись потом...
Цитата(PROme2 @  9.7.2007,  17:13 Найти цитируемый пост)
опыт показывает, что ничего хорошего за этим скрываться не будет
 В принципе - да. smile для "собственного употребления" - вполне подойдет. А вот если юзер просто бросит ссылку на понравившуюся картинку копи-пейстом, может и не хватить...

Автор: lorien 9.7.2007, 18:05
Цитата

пока я что делаю:
- проверяю, не длиннее ли строка 255 символов

На БД, что ли, экономите? )
Цитата

- начинается ли она с 'http://'

Есть ещё и ftp:// и https://
Цитата

- содержит ли 'file:'

Чего-чего содержит?

Вот вам алгоритм: делаете HEAD запрос, смотрите размер и mime-type. Если всё ок, делаете GET запрос.
Если вы параноик, то не надеетесь на данные HEAD запроса и проверяете, что размер реальных данных таки не превывышает лимит.
Всё это удобно делать с помощью библиотеки curl, вернее её модуля для python.

Автор: PROme2 9.7.2007, 18:08
Цитата(ksnk @  9.7.2007,  17:50 Найти цитируемый пост)
Юзер может заказать скачку очень большого файла... Кино, какое-нибудь, лечись потом...

CURLOPT_TIMEOUT в 15 секунд и все...
мне кажется так проще, я просто когда-то сталкивался с определением размера, уже точно не помню, но помню что были проблемы, не всегда размер удавалось узнать

Цитата(ksnk @  9.7.2007,  17:50 Найти цитируемый пост)
А вот если юзер просто бросит ссылку на понравившуюся картинку копи-пейстом, может и не хватить...

хватит, хватит... smile

Добавлено через 4 минуты и 53 секунды
Цитата(lorien @  9.7.2007,  18:05 Найти цитируемый пост)
На БД, что ли, экономите?

таких длинных урлов не будет, чтоб не было возможности всяких пакостей накалякать smile

Цитата(lorien @  9.7.2007,  18:05 Найти цитируемый пост)
Есть ещё и ftp:// и https://

в баню их...

Цитата(lorien @  9.7.2007,  18:05 Найти цитируемый пост)
Чего-чего содержит?

чтобы не прописывали локальные файлы


Цитата(lorien @  9.7.2007,  18:05 Найти цитируемый пост)
Вот вам алгоритм: делаете HEAD запрос, смотрите размер и mime-type. Если всё ок, делаете GET запрос.
Если вы параноик, то не надеетесь на данные HEAD запроса и проверяете, что размер реальных данных таки не превывышает лимит.

эта проверка делается не для поправок ошибок юзеров, а какраз для защиты от возможных взломов, так что на данные head полагаться точно не прийдется smile

Добавлено через 11 минут и 3 секунды
тут по соседству есть еще одна из моих тем smile
про header('location:...
впоследствие изучения вопроса всплыло много интересностей, в том числе и то, что при недостаточной обработке можно легко тырить куки юзеров и т.д.
так что не хотелось бы тут что-то подобное пропустить, меня волнует именно то, что можно (ли?) сделать именно специально сформированным урлом? все остальные вопросы, что там за инфа, ее объемы и т.д. меня не волнуют, это проверяется... важно именно чтобы само выполнение функции с урлом, полученным от юзера не стало дырой

Добавлено через 14 минут и 21 секунду
мда, я уже молчу про sql-инъекции, вставленные в имена файлов или php-код, интегрированный прямо в файл картинки... опасность повсюду smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)