Насколько безопасна строка sysPath = "C:/Inetpub/vhosts/..."
У меня есть немного более подробный вопрос, FileUpload из субдомена в папку основного домена, который я вроде как решил, но я просто не уверен, насколько безопасно мое решение.
Короче говоря, вошедший в систему человек может загружать файлы, но они находятся на поддомене, и файлы хранятся в папках родительского домена. Итак, я использую:
string sysPath = "C:/Inetpub/vhosts/domain.com/httpdocs/Uploads/Files/"
Является ли приемлемым?
1 ответ
Я предполагаю, что вы спрашиваете, защищены ли эти файлы от несанкционированного доступа. Ответ "Не совсем". Эти файлы доступны любому, кто может угадать (или иным образом получить) путь к файлам. Я бы порекомендовал хранить их вне папки Inetpub (что-то вроде C:\Uploads\
). После того, как вы аутентифицировали своего пользователя (т.е. пользователь вошел в систему каким-либо образом), вы можете отправить / отправить файл следующим образом:
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
Response.TransmitFile(fullFilePath);
Response.End();
filename
это просто имя файла, а не полный путь.
РЕДАКТИРОВАТЬ: немного больше деталей
Когда вы загружаете файл (как описано в другом посте), просто сохраните файл в каталоге, который не включает Inetpub
, Итак, скажем, ваш пользователь загружает файл с именем foo.gif
, Вы хотите сохранить его в C:\Uploads\foo.gif
(в вашем upload.aspx
). Теперь, когда кто-то посещает Download.aspx
запустите следующий код:
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename="foo.gif");
Response.TransmitFile(@"C:\uploads\foo.gif");
Response.End();
Я показал значения, жестко запрограммированные для ясности.