Насколько безопасна строка 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();

Я показал значения, жестко запрограммированные для ясности.

Другие вопросы по тегам