У меня есть приложение asp.net mvc с маршрутом, который позволяет пользователям запрашивать файлы, которые хранятся вне каталога веб-приложения.
Я упросту сценарий, просто сказав вам, что в конечном итоге он будет ограничен безопасным каталогом, к которому они имеют полный доступ.
Например:
Если пользователь (чей ID равен 100) запрашивает:
http://mysite.com/Read/Image/Cool.png
тогда мое приложение добавит «Cool.png» в «C: \ ImageRepository \ Users \ 100 \» и запишет эти байты в ответ. Рабочий процесс имеет доступ к этому пути, а анонимный пользователь - нет. У меня уже есть эта работа.
Но сможет ли какой-нибудь злонамеренный пользователь запросить что-то вроде:
http://mysite.com/Read/Image/..\101\Cool.png
и разрешить его на
"C:\ImageRepository\Customers\101\Cool.png"
(изображение другого пользователя?!)
Или что-то в этом роде? Есть ли способ убедиться, что путь чист, чтобы пользователь был ограничен собственным каталогом?