у нас есть веб-сайт, который позволяет пользователю загружать файлы. Теперь, если я разрешаю пользователю загружать все расширения файлов, не ограничивая их, безопасно ли это? Я ограничиваю только размер файла до 1 ГБ. Дайте свой совет. Мы используем amazon s3 для хранения файлов.
Вы никогда не должны позволять пользователям загружать файлы, которые они могут вызвать позже. Например, если на вашем сервере установлен PHP, и пользователь загрузил один из многочисленных наборов веб-эксплойтов на основе PHP (например, вариант оболочки C99) и позже смог заставить сервер выполнить его (посетив ссылку на файл) они получат полный или почти полный контроль над вашим сайтом / сервером.
Вам нужно беспокоиться не только о PHP. Любой тип файла, который базовый веб-сервер может или может выполнить, должен быть запрещен или получен таким образом, чтобы предотвратить выполнение.
Даже если вы отфильтруете расширения файлов, такие как .php или .py, все равно существует риск того, что сервер попытается выполнить файл при доступе к нему. Распространенная тактика состоит в том, что злоумышленник добавляет разрешенное расширение файла, например .jpg, к имени файла (чтобы у вас c99.php.jpg
, например), и в зависимости от конфигурации сервера он все еще может выполняться сервером как PHP. Если вы используете Unix-подобную ОС, то хороший шаг - явно пометить загруженные файлы как неисполняемые.
Никогда не безопасно позволять пользователям делать что-либо без ограничений.
Не позволяйте своим пользователям делать больше, чем им нужно. В этом случае вы не указали, почему они загружают файлы - это частично определит, какие ограничения вы должны наложить на файлы. (например, если у вас есть сайт, посвященный документам, не позволяйте пользователям загружать приложения (.exe), ограничьтесь допустимым набором mime-типов документов).
Я бы предположил, что более важным является то, что делается с ними после загрузки. Например, вполне нормально загрузить сценарий - если сценарий будет отображаться в виде текста (например, GitHub), но не в том случае, если пользователь может получить доступ к файлу и выполнить его на сервере. Точно так же при загрузке на S3 вам необходимо убедиться, что ваши пользователи не могут напрямую получить доступ к своим файлам, иначе кому-то очень легко загрузить вредоносный файл и использовать вашу учетную запись S3 для его обслуживания.
Если пользователи не могут выполнять файлы, не могут получить к ним прямой доступ и не могут отправить их другому человеку (т.е. они могут только сохранить файл и должны войти в систему для его получения), то требуется меньше ограничений.