Как я могу защитить от проблем TOCTOU на основе соединений в C#?

Я хотел бы защитить от проблем TOCTOU с переходами в C#. Я обслуживаю файлы из определенных каталогов. Этими каталогами могут быть общие папки SMB/CIFS или локальные диски любой файловой системы (но, скорее всего, NTFS).

Учитывая мое понимание проблемы, следующее должно защитить меня от нее:

  1. Откройте файл с помощью File.Open(foo, FileMode.Open, FileAccess.Read, FileShare.Read) Это должно предотвратить что-либо от изменения файла или структуры каталогов над ним. Мне нужно будет поймать FileNotFoundException в случае, если файл был удален между File.Exists проверить и File.Open,

  2. Переместите структуру каталогов вверх, проверяя, что каждая папка не является соединением, пока я не достигну корневой папки.

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

Я не думаю, что мне нужно беспокоиться о CIFS, так как мое исследование этого вопроса заставляет меня поверить, что невозможно создать символические ссылки на CIFS, если клиент не поддерживает расширения Unix (чего нет у Windows).

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

0 ответов

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