我有一些文件保存在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
答案 0 :(得分:0)
如果您使用默认的互联网信息系统,默认文件夹wwwroot
将通过Application Pool
直接锁定到指定的用户。在大多数情况下,这将是网络服务帐户。
您的特定应用程序将获得一定程度的许可,但默认情况下,您的网络应用程序无法访问wwwroot
的其他内容。
目录是:
inetpub - wwwroot - Example
inetpub - wwwroot - Demo
因此Example
和Demo
都是托管的两个独立网站。因此,如果您尝试从一个应用程序导航到另一个目录,它应该会自动保护您。
但是,如果您需要阻止来自特定用户或应用程序的网站,确实可以。在目前的状态下,问题太广泛了。
这是两种方法,但是如果您使用虚拟目录,则应该查看以下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");
}
}