【问题标题】:How to deny access to directory contents (IIS served site) via browser如何拒绝通过浏览器访问目录内容(IIS 服务站点)
【发布时间】:2015-02-24 21:15:38
【问题描述】:

我有一些文件保存在SiteFolder/ 中,我需要通过 C# 项目访问这些文件,但我不希望它们通过浏览器在这些路径中列出。我怎样才能做到这一点? IIS 中是否有可以更改的设置?

另外,由于我完全控制了 IIS 用户来访问/读取/写入此目录文件,那么解决方案是什么?

基本上我不希望任何人通过浏览器访问该目录的内容,但应该可以通过 IIS 访问。

提前致谢。

编辑 1:这是不受影响的文件写入功能 -

FileStream file = new FileStream(Server.MapPath("~/SiteFolder/example.txt"), FileMode.Append, FileAccess.Write, FileShare.Write);
using (StreamWriter fileWriter = new StreamWriter(file))
{
     fileWriter.WriteLine("Something");
}

此外,由于此代码在 Amazon EC2 上运行,我必须为这些用户提供对文件夹和文件的完全控制权 -

IUSR
MyProjectName

【问题讨论】:

  • 这里有一些想法:serverfault.com/questions/37762/…
  • 这仅解决了浏览器访问部分,但现在写入这些文件的功能也被破坏了。
  • 那么你必须展示你的代码。它可能作为请求用户而不是应用程序的服务帐户运行。我提供的链接可能比 URL 重写更正确,因为它处理的是保护对资源的访问,而不是在发出请求时隐藏它们的位置。
  • @Colin 我也是这么想的。 URL 重写可能更倾向于隐藏方法名称/请求参数。你能告诉我你需要什么信息吗?
  • 当您说“写入这些文件的功能也损坏了”时,您能否显示“损坏”的代码块并描述使用它的上下文(是否在调用服务,是否在页面控制器中)?另外,是否启用了模拟或如何对用户进行身份验证/授权?

标签: c# asp.net iis iis-7


【解决方案1】:

我将假设您在尝试写入相关文件时冒充调用者。否则,如果您以系统帐户运行,似乎不会影响写入权限。

因此,除了上面提到的配置(https://serverfault.com/questions/37762/block-access-to-subdirectory-using-web-config)之外,我的建议是通过暂时撤消这样的模拟来运行将写入文件的代码块作为系统帐户:

using (System.Security.Principal.WindowsImpersonationContext wic = 
     System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero))
{
    FileStream file = new FileStream(Server.MapPath("~/SiteFolder/example.txt"), FileMode.Append, FileAccess.Write, FileShare.Write);
    using (StreamWriter fileWriter = new StreamWriter(file))
    {
         fileWriter.WriteLine("Something");
    }
}

【讨论】:

    【解决方案2】:

    如果您使用默认的 Internet 信息系统,默认文件夹 wwwroot 通过您的 Application Pool 直接锁定给指定用户。在大多数情况下,将是一个网络服务帐户

    您的特定应用程序将具有一定程度的权限,但默认情况下您的网络应用程序不应访问wwwroot 的其他内容。

    目录将是:

    inetpub - wwwroot - Example
    inetpub - wwwroot - Demo
    

    所以ExampleDemo 都是托管的两个独立网站。因此,如果您尝试从一个应用程序导航到另一个目录,它应该会自动保护您。

    但是,如果您需要阻止特定用户或应用程序访问某个网站,这确实是可能的。在目前的状态下,这个问题太宽泛了。

    • 请求过滤
    • 网址重写

    这是两种方法,但是如果您使用虚拟目录,您应该看看下面的here

    没有虚拟目录,我的上述保护是正确的:

    站点是应用程序和虚拟目录的容器,并且 您可以通过一个或多个独特的绑定来访问它。

    绑定包括两个对通信很重要的属性: 绑定协议和绑定信息。绑定协议 定义服务器和服务器之间通信的协议 客户端发生。绑定信息定义的信息是 用于访问网站。例如,Web 的绑定协议 站点可以是 HTTP 或 HTTPS,绑定信息是 IP 地址、端口和可选主机头的组合。

    【讨论】:

    • 好吧,我尝试了请求过滤方法,但它似乎也拒绝访问代码。我现在没有使用虚拟目录,但对我来说似乎是一个非常干净的解决方案。我只想限制浏览器访问说 example.com/SiteFolder/file.txt 但似乎没有简单的方法来实现这一点。
    • 您可以使用 URL 重写来阻止对该路径的访问。
    • 当然,我要试试。
    • 我读到了 URL 重写方法,但这不是我打算做的。我只想拒绝对服务器资源的访问,而不是将用户重定向/重写到另一个路径。
    猜你喜欢
    • 2019-07-26
    • 2013-01-17
    • 2018-12-26
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多