2011-01-18 2 views
6

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

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

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

  3. Если я зашифрую файл, мне все равно придется беспокоиться о сохранении содержимого в каталоге Temp, виртуальной памяти или в другом месте до того, как файл будет зашифрован?

  4. Могу ли я выполнить безопасное удаление во всех случаях, связанных с местоположением (темп, виртуальная память, любые другие) и как это сделать?

  5. Есть ли какие-либо проблемы, которые я пропустил, или альтернативный способ достижения заявленной цели?

N.B. Это веб-приложение ASP.NET.

Редактировать: Спасибо djeeg за указание ссылки о том, как переместить каталог загрузки темпа в нечто более контролируемое.

Отзывы о других пунктах?

+0

+1 для четко заданного вопроса. djechelon ответ ударил по аспекту, вы должны более внимательно рассмотреть «доверие». Вы должны помнить, что всегда будет открытая площадь поверхности, и вы должны доверять кому-то. Если вы обеспокоены тем, что вам нужен физически защищенный выделенный сервер и выключатель kill (способ физического уничтожения данных), вам не придется слишком беспокоиться о внутренней механике. – Robert

+0

Примечание: .Net - это управляемая среда выполнения, а временное хранилище данных является специфичным для реализации, и поэтому любая попытка стереть данные из запущенной системы будет бесконечной проблемой, поскольку любое обновление может изменить фактическую реализацию. – Robert

ответ

3

безопасности Disk

Вы можете позволить протирать утилита сделать работу для вас.

Если вы используете ASP.NET для Mono/Linux, вы можете использовать команду wipe через класс Process (убедитесь, что установлен пакет очистки).

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

Я люблю this сайт, который распространяет бесплатный wipe.exe, который не входит в стандартную установку Windows (слишком плохо).

Второй способ - реализовать Guttman algorithm, но я думаю, что дешевле использовать чужой код.

Имейте в виду, что стирание очень интенсивно в I/O, не ждите его завершения или вы можете резко замедлить работу приложения. Кроме того, на сильно загруженных веб-сайтах вы можете столкнуться с значительным замедлением.

безопасности памяти

SecureString класс поможет вам не оставить никаких следов строки в памяти. Но когда вы работаете с файлами, вы фактически работаете с потоками. Я не уверен, беспокоюсь о содержимом энергозависимой памяти (даже если вы обрабатываете документы Wikileaks).

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

  1. Может ли кто-нибудь получить доступ к серверу с учетной записью администратора/пользователя с возможностью выполнения дампа памяти? (Обычные пользователи не могут читать вашу память, а .NET предотвращает переполнение буфера из-за неиспользуемых указателей)
  2. Может ли кто-нибудь физически получить доступ к серверу? Вы не доверяете своему хостинг-провайдеру достаточно? Вместо этого вы запускаете виртуальный сервер?

Если ответ не да вы не должны беспокоиться о безопасности памяти

свопа безопасности

Даже если вы работаете на Windows, позвольте мне назвать «своп» файл подкачки, или файл виртуальной памяти или что-то еще. Вы можете подумать об отключении его (убедитесь, что у вас много ресурсов), или, иначе, вы можете подумать об шифровании (но вы получите снижение производительности).

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

Если данные слишком чувствительны, я хотел бы отключить обмен.

[Добавить] Я уверен, что вы уже использование SSL, чтобы загрузить файл, только в случае, если вы забыли некоторые принципы ...

2

я бы, вероятно, изменить местоположение загрузки по умолчанию из C: \ Temp на то, что вы можете очистить

http://blogs.msdn.com/b/viag/archive/2006/10/25/how-to-change-the-default-tempfile-upload-location-for-the-asp-net-2-0-fileupload-control.aspx

И если это не было достаточно хорошо, вы, возможно, придется искать в написании пользовательских HttpHandler в делай то, что тебе нужно.

0

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

javascript secure key exchange 

Убедитесь, что вы не пропустите расшифрованные данные вокруг. Расшифруйте и используйте данные в том же классе или методе и убедитесь, что вы очистите данные до того, как сборщик мусора выпустит ваш объект. Защитите свой своп (я парень Linux, поэтому я не делаю этого в Windows).

И, наконец, поймите, что это трудная задача, чтобы решить эту проблему, и что любое испеченное или приготовленное в домашних условиях решение может быть взломанным в считанные минуты, если ожидаемая прибыль будет достаточно высокой. Безопасность - это компромисс. Сколько стоят ваши данные?

Смежные вопросы