ограничить доступ к файлам документов asp.net - PullRequest
1 голос
/ 11 апреля 2011

У меня есть папка в приложении asp.net, содержащая файлы документов, к которым могут обращаться только определенные пользователи (dowwload) (подключенный администратор или другие учетные записи)

как я могу это сделать?
есть идеи?
заранее спасибо.

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

Папка App_Data в .NET защищена и поэтому идеально подходит для этой цели. Я обычно помещаю сюда конфиденциальные файлы, затем у меня есть страница «ViewDoc.aspx», которая выполняет проверки безопасности, а затем отправляет файл пользователю (используя Response.Write).

1 голос
/ 11 апреля 2011

Поместите конфиденциальные файлы вне корня веб-сайта, чтобы они не могли быть доступны по URL-адресу.

После этого используйте это HttpHandler (записано в VB.NET) для обслуживания файлов:

Public NotInheritable Class FileHandler
    Implements IHttpHandler

    Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

    Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
        If Not String.IsNullOrEmpty(context.Request.QueryString("FileName")) Then
            Dim fileName As String = context.Request.QueryString("FileName")

            Try


                Dim filesPath As String = "D:\TheFiles\"

                Dim fileInfo As New IO.FileInfo(filesPath & fileName)

                If fileInfo.Exists Then

                    Dim fileExt As String = fileInfo.Extension.Remove(0, 1).ToUpperInvariant


                    If fileExt = "JPG" Then
                        context.Response.ContentType = "image/jpeg"
                    Else
                        context.Response.ContentType = "image/" & fileExt
                    End If

                    context.Response.TransmitFile(fileInfo.FullName)

                End If

            Catch ex As Exception
            End Try

        End If
    End Sub

End Class

и зарегистрируйте этот обработчик в вашем файле web.config следующим образом:

<httpHandlers>
        <add verb="*" path="secfile.axd" type="MyApp.FileHandler, MyApp" validate="false"/>
    </httpHandlers>

используйте так:

<a href="secfile.axd?pic=sample.jpg" />

Помните добавьте свой типы файлов для обработчика и изменения response.contenttype по типу вашего файла.

Использование обработчика - не единственный способ , вы можете использовать context.Response.TransmitFile(fileInfo.FullName) в своем файле aspx.

0 голосов
/ 11 апреля 2011

Простой способ сделать это - НЕ помещать эти документы в папку вашего приложения ASP.NET, а вместо этого помещать их в другое место файловой системы, к которым нет прямого доступа из браузера.Затем программно вы можете передать файл пользователю, если он / она уполномочен на это.

...