Iis 当禁用匿名访问时,是否可以将用户名/密码嵌入到和ASP文件中以访问文件?

Iis 当禁用匿名访问时,是否可以将用户名/密码嵌入到和ASP文件中以访问文件?,iis,asp-classic,Iis,Asp Classic,我重新设计了一个我工作的登录系统,目前如果有人知道某个文件的路径,即使他们根本没有登录,他们也可以访问该文件。到目前为止,我已经研究并提出了两种方法来防止这种情况 禁用匿名访问并将文件由网页带入。这是我现在更愿意做的,因为它不需要移动文件,而且似乎相对容易实现。问题是,如果我禁用匿名访问试图访问文档的文件,则需要用户名/密码。是否可以将用户名/密码作为ASP文件的一部分来消除此问题 另一个选项是将文件移动到网站之外以及服务器上的其他位置,并让网页将文件导入到与第一个选项类似的位置。我希望最终使用

我重新设计了一个我工作的登录系统,目前如果有人知道某个文件的路径,即使他们根本没有登录,他们也可以访问该文件。到目前为止,我已经研究并提出了两种方法来防止这种情况

  • 禁用匿名访问并将文件由网页带入。这是我现在更愿意做的,因为它不需要移动文件,而且似乎相对容易实现。问题是,如果我禁用匿名访问试图访问文档的文件,则需要用户名/密码。是否可以将用户名/密码作为ASP文件的一部分来消除此问题

  • 另一个选项是将文件移动到网站之外以及服务器上的其他位置,并让网页将文件导入到与第一个选项类似的位置。我希望最终使用这种方法,但目前这样做需要更多的时间,因为我们必须为所有用户移动文件,并更改生成不同报告的程序以输出到新位置


  • 您可以使用IIS中的重写规则执行此操作。

    您还可以使用IIS中的请求筛选规则执行此操作。 “是否可以将用户名/密码作为ASP文件的一部分来消除此问题?”

    是的,如果您只想限制对.asp文件的访问,会话变量在经典asp中往往被过度使用,但在这种情况下,使用会话变量是完全合适的。在所有受限页面的开头,您可能会有如下内容

    <% If Session("loggedin") <> 1 then Response.Redirect("login.asp") End If %>
    

    我在这个网站的其他地方找到了代码的基础,但它并没有按照我需要的方式工作


    文件将被引入并显示在浏览器中。如果用户试图查看另一个用户的文件,它们只会被重定向。我目前只处理PDF和TXT文件,但如果需要,可以很容易地添加新的文件类型。

    这是基于Intranet的应用程序吗?是否正在使用active directory?该系统目前只能在内部访问,但设计为可通过internet访问。登录系统不使用active directory,它是数据库驱动的。为什么不关闭匿名访问,让需要访问文件的用户登录?当前系统就是这样。但问题是,如果用户知道直接url,他们仍然可以访问这些文件。根据同样的原则,他们也可以访问其他用户的文件。这种情况不太可能发生,特别是我们使用的一些文件/目录名,但我们希望完全消除这种可能性。系统已经这样设置了。我试图阻止的是每个用户直接访问文件(主要是pdf)。我真正想要的是能够在检索数据的页面中嵌入windows登录用户名/密码,尽管我仍然需要一种方法来限制对pdf文件的直接访问。您可能可以使用服务器http请求。我将编辑我的答案以向您展示我的意思。我认为由于我们的服务器设置,我最终无法使此答案正常工作,但我能够找到解决方案并使其符合我的需要。新脚本不需要用户名/密码,但仍然能够根据需要显示文件。我正在发布我最终使用的脚本。
    Set xml = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")
    xml.open "GET","http://fullurlto/yourpdffile.pdf", false, "yourusername", "yourpassword"
    xml.send 
    Response.ContentType = "application/pdf"
    Response.write xml.responseText
    
    Dim curUser, curDir, curtype
    curUser = Request.QueryString("user")
    curDir = Request.QueryString("dir")
    curType = Request.QueryString("type")
    
    If curUser = Session("homefolder") Then
    Set adoStream = CreateObject("ADODB.Stream")
    adoStream.Type = 1
    adoStream.Open()
    
    adoStream.LoadFromFile "C:/path/to/" & curUser & curDir
    
    Response.Buffer = true
    Response.CharSet = "UTF-8"
    Response.Clear
    If curType = ".TXT" Then
        Response.ContentType = "text/plain"
    Else
        Response.ContentType = "application/pdf"
    End If
    
    Response.flush
    Do While Not adoStream.eos
        Response.BinaryWrite adoStream.Read(1024 * 8)
        Response.flush
    Loop
    Response.End()
    adoStream.close
    Set adoStream=nothing
    Else
    Response.Redirect "denied.asp"
    End If