2010-04-23 2 views
0

Как я могу защитить файлы, хранящиеся на сервере? У нас есть приложение ASP.NET, которое создает PDF-файлы. Они не хранятся в папке wwwroot, а в другой папке, то есть C: \ inetpub \ data. Это обеспечивает большую безопасность, но, возможно, недостаточно. Для процесса ASP.NET/IIS потребуется доступ на запись в эту папку, чтобы он создавал PDF-файлы.Как заблокировать и защитить файлы, хранящиеся на сервере в ASP.NET?

Как только PDF создается, его можно просмотреть, используя форму ASP.NET, называемую viewpdf.aspx, с файлом, который нужно просмотреть, добавить к строке запроса, например viewpdf.aspx? FILE = mynewfile.pdf. Это загружается из gridview.

Полный путь к C: \ inetpub \ data разрешен и загружен в событие Page_load страницы просмотра. Теперь мне интересно, как это обеспечить. Любой может просто просмотреть файл. Не путем ввода URL-адреса, поскольку он не будет рассматриваться IIS (его не в wwwroot), но может изменить запрос на странице viewpdf.

Как остановить кого-нибудь, взломав это?

+3

шифровать значения строки запроса: http://stackoverflow.com/questions/240713/how-can-i-encrypt-a-querystring-in-asp-net – LesterDove

ответ

2

Во-первых, не следует использовать имя файла в запросе строка. Используйте другой идентификатор; предпочтительно недопустимый идентификатор. Одним из примеров является базовый 64 кодированный guid.

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

В-третьих, вы можете подумать о сохранении фактического файла в другом месте. SQL 2008 имеет тип данных FILESTREAM, который может вытолкнуть фактические данные файла в папку файловой системы и, похоже, работает очень хорошо.

1

Вы блокируете viewpdf.aspx с помощью какой-либо формы аутентификации (например, для проверки подлинности форм), в противном случае любой, у кого есть доступ к querystring (зашифрованный или нет), сможет просматривать файл. У вас есть модель безопасности, чтобы определить, кто имеет доступ к файлу?

+0

Да у нас есть собственный механизм безопасности, который проверяет на событие загрузки страницы. – jaffa

1

Что я использую, чтобы сделать это, я извинения, потому что я не являюсь носителем языка:

  • При сохранении в формате PDF, переименовать его к Guid как имя (используйте System.Guid)
  • создать таблицу с сгенерированными именами и сохранить там оригинальное имя, если оно вам понадобится позже.
  • При подаче PDF делают другую страницу, которая перенаправляет с Server.Transfer на страницу ASPX, и сделать свой поиск по идентификатору записи, а не имена