向网络服务帐户授予对 ASP.NET Web 应用程序的读/写权限有什么危险?我必须为我的应用程序需要写入的任何目录执行此操作,例如我的 VistaDb 数据库的 App_Data 以及一些用于上传图像和更改文本文件等的随机目录。这样做有什么危险?是否可以只为网络服务的整个 Web 应用程序授予读/写权限?
4 回答
在共享主机中或在同一台服务器上运行多个网站时,会遇到向网络服务帐户授予文件夹写入权限的最大安全风险。
基本上,如果您授予修改权限,则服务器配置为作为网络服务运行的所有其他 ASP.NET 应用程序(默认情况下)也将具有对该文件夹的写入权限,这可能会被利用。
这样做的危险在于网络服务是一个共享帐户,并且在该帐户下运行的任何应用程序或服务都可以访问该目录。
根据您使用的 IIS 版本,您可以将 Web 应用程序放在单独的应用程序池中,并让它在不同的用户帐户下运行。然后,您可以专门授予该用户而不是网络服务的访问权限。这仅在 IIS 6 或更高版本中可用。
那么直接的危险是网络服务当然可以读/写这些文件夹,但是每个微软 - 这个帐户是权限有限的最低权限机器帐户。如果您在域中,更好的方法可能是使用域帐户 - 有关两者的详细信息,请访问http://msdn.microsoft.com/en-us/library/ms998320.aspx
好的,所以如果我能弄清楚如何让您的应用程序将文件写入文件系统,因为您授予对整个应用程序的虚拟目录的读/写权限,我现在可以为您的网站编写一个 aspx 文件,调用它并运行任意代码,包括 WMI 调用和 COM 互操作等很酷的东西。
您是否有时间和资源最终证明我不能使用您的应用程序(包括您未编写的部分,例如框架本身)将文件写入您的网站?为什么不排除设置 ntfs 权限如此便宜(时间上)的可能性呢?
现在,如果您仅授予 App_Data 权限,即使我确实向该文件夹写入了一个 aspx 文件,我也无法调用它,因为 App_data 文件夹被运行时视为特殊文件夹,并且不会从那里提供任何文件(以免有人只是调用http://yourserver.com/app_data/data.mdb并通过简单地下载文件来破解您的数据库)。显然 App_Data 中的这些文件可以通过使用 ADO 等来访问,但这不是安全问题。