Я разрабатываю php-скрипт для замены текущего, который будет подвергаться воздействию различных рынков / стран. Этот сценарий между другими предлагает функцию загрузки фотографий.
После долгих чтений о проблеме я последовал описанному ниже подходу. Я был бы глубоко признателен за ваши замечания относительно его безопасности.
img10000.jpg
будет храниться на photos/a/f/0/img10000.jpg
а img10001.jpg
будет храниться на photos/0/9/3/img10001.jpg
. Это делается по другим причинам (использование субдоменов для статического контента служит или использует CDN). Скрипт будет запущен на выделенном сервере Linux.
apache
(или любому пользователю, на котором работает ваш веб-сервер). Я не уверен, почему вы не использовали бы временный каталог по умолчанию для php, поскольку он также находится за пределами корня веб-сайта. /.png/
самом деле соответствует apng.php
. Шаги с 5 по 8 не связаны с безопасностью.
Шаг 9: Я предполагаю, что ваш сайт позволяет каждому видеть каждую фотографию. Если это не так, у вас должна быть схема URL с существенно более длинными URL-адресами (например, хэш-память изображения).
Вы также должны проверить размер загруженного файла, поскольку getimagesize иногда может превышать доступную оперативную память. Также неплохо предположить, что ваш скрипт может сработать в любой момент (например, когда электричество идет вниз), поэтому вы должны выполнить некоторые процедуры очистки, чтобы удалить левые ненужные файлы.
Это довольно полный подход, но я не вижу механизма предотвращения выполнения кода.
Вы должны убедиться, что содержимое изображения никогда не включается (с вызовом include или require) или выполняется через eval ().
В противном случае может быть запущен PHP-код, включенный в конец файла.
Вы также можете попытаться обнаружить php-код внутри содержимого изображения (с файлом_get_contents, а затем регулярное выражение для поиска «<? Php»), но я не смог найти 100% -ный безопасный способ устранения подозрительного кода, не уничтожая некоторые (действительные) изображений.