Том 64
После битвы
Можете представить, что вы беседуете с роботом "за жизнь"? Нет, беседовать можно, конечно, но вот вряд ли он вас поймет. Аналогично - сервер зная, что клиент оповещен, а значит, если в пришедшем ошибки, которые явно есть результат обхода проверки ввода или вообще роботом прислано, нужно ли серверу вести с роботом диалог?
Если предполагается диалог клиент сервер, в случае, если на клиенте нет проверки ввода, тогда да, возвращаем клиенту ошибки. Иначе exit, сообщение "Could not read remote file" роботу как мертвому припарка, а желающему вас прощупать не стоит сообщать подробностей. А на локальном сервере, в режиме отладки, нужно выводить даже предупреждения, безобидность, на первый взгляд, некоторых, может быть причиной уже ошибок далее в коде. Режим отладки можно включать и на удаленном сервере если пользователь имеет права "видеть их". Возникают и на удаленном сервере ошибки, причиной которых могут быть конфигурации или иные особенности сервера, которые на локальном сервере не отследить.
Процессы над графикой могут порождать ошибки, хотя если заранее определено разрешение изображения и рассчитан размер памяти под него, и размер не выше допустимого, то может возникнуть только одна ошибка - не создан ресурс, то есть, файл не является изображением.
Все бы ничего, если бы такая ошибка возникала на первом загружаемом файле. Но если первый был корректный, а второй явная подстава, просто завершить работу означает, что в каталоге будет сохранен мусор.
Если же обработанные файлы сохранять в сессию под именами сгенерированными, как ключами, то и в функции processingIMG() можно завершать работу скрипта. Сохраненные до ошибки файлы будут удалены сборщиком мусора. Если же ошибок не возникло, то файлы из сессии переносятся в каталог, а ключи (имена файлов) одним запросом записываются в базу.
Каждый тип графического файла имеет заголовок, из которого можно узнать информацию о файле, включая его ширину и высоту. Считав по известному смещению данные о разрешении, можно их узнать функцией unpack(). Это позволит не сохранять на диск файл ради получения этой информации. Это на будущее как прикладная задача для изучения в общем полезных функций pack() и unpack().
Даже при соблюдении всех предосторожностей, тотальной проверки, каталог в который загружаются файлы извне и являющийся публичным, должен иметь соответствующие права. Права на запись в этот каталог получает владелец только на время записи в него файла, а после записи возвращает прежние. В каталоге должен быть запрещен запуск исполняемых файлов посредством .htaccess
#запретить листинг файлов каталога
Options -Indexes
#запретить выполнение скриптов в каталоге
php_flag engine 0
AddType "text/plain" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .php6 .php7 .asp .jsp
Последний раз редактировалось laimas, 18.02.2018 в 10:31.
|