【问题标题】:IIS Authorization and RestrictionsIIS 授权和限制
【发布时间】:2015-04-10 03:02:48
【问题描述】:

我试图限制匿名用户直接浏览我网站文件夹中的特定文件名(图像文件)。但是当我打开文件夹的“IIS Authentication”功能时,匿名用户和网站应用程序都无法访问图像文件。

如何拒绝匿名用户访问文件(例如,如果用户输入绝对 URL),但允许访问网站应用程序? (我认为也许“IP 地址和域限制”功能也可以使用,但无法使用)

我可以将图像文件移动到网站外部的文件夹中,但不确定如何在 .ImageUrl 属性中使用它。

...撞

编辑 - 解决方案(将以下内容放在 .aspx 页面中,并将 ImageUrl 属性设置为此页面,并使用任何所需的查询字符串参数):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If (Request.QueryString("FileType") IsNot Nothing) And (Request.QueryString("FileName") IsNot Nothing) Then

Try
' Read the file and convert it to Byte Array
Dim filePath As String = UrlXlat(Request.QueryString("FileType") & "\")
Dim fileName As String = Request.QueryString("FileName")
Dim contentType As String = "image/" & Path.GetExtension(fileName).Replace(".", "")

Dim fs As FileStream = New FileStream(filePath & fileName, FileMode.Open, FileAccess.Read)      
Dim br As BinaryReader = New BinaryReader(fs)
Dim bytes As Byte() = br.ReadBytes(Convert.ToInt32(fs.Length))
br.Close()
fs.Close()

'Write the file to Reponse
Response.Buffer = True
Response.Charset = ""
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = contentType
Response.AddHeader("content-disposition", "attachment;filename=" & fileName)
Response.BinaryWrite(bytes)
Response.Flush()
Response.End()

Catch ex As Exception
response.write(ex):response.end
End Try

End If

End Sub

【问题讨论】:

    标签: asp.net iis authorization relative-path restriction


    【解决方案1】:

    您可以将文件移动到站点根目录之外的文件夹或 App_Data 文件夹(受 ASP.NET 框架直接浏览的保护),然后将 ImageUrl 设置为指向一个通用处理程序(.ashx 文件),负责将文件传送到浏览器。您在处理程序中执行身份验证检查。

    我写了一篇提供实现细节的文章:http://www.mikesdotnetting.com/article/122/simple-file-download-protection-with-asp-net

    【讨论】:

    • 谢谢,迈克。我做了同样的事情。我将 ImageUrl 属性设置为等于 .aspx 页面,并在上面编辑中添加了代码。
    • 其实,我刚刚发现了一个漏洞——互联网上的用户可以简单地浏览到.aspx页面,使用页面源中的参数,然后......瞧......他们可以下载文件。它被提供给他们,就像它被提供给 Web 应用程序一样。想法?
    • 如果您按照建议使用处理程序并在传输文件之前检查用户是否经过身份验证,他们将无法做到这一点。
    • 这可行,但是网站将如何使用该资源?例如,假设它是一个 .jpeg 文件,位于 c:\dir\site\image.jpeg。使用 HttpHandler 身份验证方法肯定会阻止随机用户访问 .jpeg 文件。但是,该网站也必须显示此图像。那么,将在图像控件的 .ImageUrl 属性中放入什么?可以为该属性输入的任何内容都可以由用户模拟,不是吗?用户始终可以通过输入sitename/HandlingFile.aspx?parameters 来模拟站点。处理文件不知道区别。
    • App_Data 文件夹就是一个很好的例子。如果我把图像文件放在那里,没有人可以浏览它——太好了。但是,该网站也无法显示它。我可以为网站 URL(例如,“www.site.com”)设置“允许”规则,让网站显示图像,但随后任何人都可以输入相同的内容并访问文件。任何“文件流”处理文件也可以由用户浏览并通过相同的方法直接流式传输给他们。
    猜你喜欢
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2012-07-23
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多