Как защитить папку, позволяющую пользователям загружать файлы? - PullRequest
2 голосов
/ 22 августа 2008

У меня есть папка на моем веб-сервере, которая позволяет пользователям загружать фотографии с помощью страницы ASP.

Достаточно ли безопасно дать IUSR права на запись в папку? Должен ли я обеспечить что-то еще? Я боюсь, что хакеры обойдут страницу ASP и загрузят контент прямо в папку.

Я использую ASP classic и IIS6 на Windows 2003 Server. Загрузка осуществляется через HTTP, а не через FTP.

Редактировать: изменение вопроса для ясности и изменение моих ответов в качестве комментариев.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2008

также, я бы порекомендовал не разрешать пользователям загружать файлы в папку, доступную из Интернета. Даже самое лучшее обнаружение MIME-типа может не получиться, и вы абсолютно не хотите, чтобы пользователи загружали, скажем, исполняемый файл, замаскированный под jpeg, в случае, если ваш сниффинг MIME не удался, но тот, который в IIS, работает правильно.

В мире PHP это еще хуже, потому что злоумышленник может загрузить вредоносный скрипт PHP и позже получить к нему доступ через веб-сервер.

Всегда всегда сохраняйте загруженные файлы в каталоге где-то за пределами корня документа и обращайтесь к ним через некоторый скрипт доступа, который выполняет дополнительную очистку (и, по крайней мере, явно устанавливает изображение / любой тип MIME.

1 голос
/ 22 августа 2008

Как пользователь будет загружать фотографии? Если вы пишете страницу ASP, чтобы принять загруженные файлы, то только пользователю, который запускает IIS, потребуется разрешение на запись в папку, поскольку IIS будет выполнять файловый ввод-вывод. Ваша ASP-страница должна проверять размер файла и иметь некоторую форму аутентификации, чтобы не дать хакерам заполнить ваш жесткий диск.

Если вы настраиваете FTP-сервер или другой метод передачи файлов, ответ будет зависеть от выбранного вами метода.

0 голосов
/ 17 сентября 2008

Лучшим вариантом для вас, вероятно, будет использование компонента загрузки (я использовал ASPUpload), который позволяет загружать / скачивать файлы из папки, недоступной с веб-сайта.

Вы получите несколько аутентификационных хуков, и вам не придется беспокоиться о том, что кто-то случайно просмотрит папку и загрузит файлы (или загрузит в вашем случае), поскольку файлы доступны только через компонент.

0 голосов
/ 23 августа 2008

Вам нужно будет предоставить разрешения на запись, но вы можете проверить тип mime файла, чтобы убедиться, что изображение. Вы можете использовать FSO так:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

Кроме того, большинство загружаемых COM-объектов имеют свойство типа, с которым вы можете проверить перед записью файла.

...