Как убедиться, что все записанные файлы находятся ниже заданного пути (предотвратить доступ к директории)

У нас есть приложение на C#, которое будет записывать файлы в конфигурируемое место. Набор файлов (и относительные пути) определяется во время выполнения.

Мы хотим убедиться, что оно не может записывать файлы за пределы конфигурируемого места.

Например, конфигурируемое место может быть c:\Stuff\Export, ошибкой будет, если программа запишет что-либо под C:\Stuff\Important

На самом деле, я думаю, мы можем достичь этого двумя способами: 1) Убедиться, что ни один из относительных путей (записываемых файлов) не указывает 'Parent directory' (обычно "../") - System.Path не определяет компонент пути "parent directory", хотя (как и для разделения путей, т.е. System.Path.PathSeparator). Мне кажется немного неудобным проверять наличие "../" в строке.

2) Убедитесь, что все конечные абсолютные пути, которые генерируются (путем объединения выходного местоположения и относительного пути к файлу) являются относительными, т.е. находятся под выходным местоположением. Однако я не совсем понимаю, как это сделать.

Example usage:
Output directory: c:\Stuff\Export
Output path 1: "foo\bar\important.xls"
Output path 2: "foo\boo\something.csv"
Output path 3: "../../io.sys"

Expected final files
1. c:\Stuff\Export\foo\bar\important.xls
2. c:\Stuff\Export\foo\boo\something.csv
3. Should throw exception
5
задан casperOne 27 July 2012 в 15:02
поделиться