如何通过浏览器拒绝访问目录内容(IIS提供的站点)

时间:2015-02-24 21:15:38

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

我有一些文件保存在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

2 个答案:

答案 0 :(得分:0)

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

您的特定应用程序将获得一定程度的许可,但默认情况下,您的网络应用程序无法访问wwwroot的其他内容。

目录是:

inetpub - wwwroot - Example
inetpub - wwwroot - Demo

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

但是,如果您需要阻止来自特定用户或应用程序的网站,确实可以。在目前的状态下,问题太广泛了。

  • 请求过滤
  • 网址重写

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

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

  

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

     

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

答案 1 :(得分:0)

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

因此,除了上面提到的配置(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");
    }
}