【问题标题】:publishing options发布选项
【发布时间】:2011-12-09 06:43:12
【问题描述】:
问:
我想问一下,在 Web 应用程序发布过程中,在我的服务器上发布 .cs 和 .aspx 文件是否被认为是一种不好的做法,并且可能会导致安全违规?
因为有时我必须这样做,因为报告文件未发布或 css 文件无法正常工作。
何时使用其中的每个选项:
仅运行此应用程序所需的文件。
所有项目文件。
源项目文件夹中的所有文件
【问题讨论】:
标签:
asp.net
visual-studio-2008
iis
web-applications
security
【解决方案1】:
这可能是误用了原理,但我一直想到principle of least privilege。我的意思是:
- 我的用户是否需要查看任何代码文件(适用于“所有项目文件”和“源项目文件夹中的所有文件”下)?
- 我的用户是否需要查看我的项目文件夹中的任何文件,但未包含在我的项目中(适用于“源项目文件夹中的所有文件”下)?
如果这些问题的答案是否定的,那么我仅使用运行此应用程序所需的文件进行发布。
我曾经犯过使用“源项目文件夹中的所有文件”发布网站的错误,因为我需要从我使用的插件中部署一堆.css和.js文件,并且不知道如何快速将这些文件包含在我的 Web 项目中。
但是,当我看到我的所有源代码都显示在我的生产文件夹中时,我迅速将我的发布选项切换回“仅运行此应用程序所需的文件”,并部署删除目标文件夹中的所有文件。然后,我环顾四周,想办法将所有文件包含在我的项目中没有的文件夹中,从那以后我变得更快乐了。
老实说,即使我的用户需要查看某种代码,我也会考虑先写一个quine,然后再将我的 .cs 文件副本发布到任何网站上。人们对互联网安全有不同的看法,但我经常想起 Gene Spafford 的这句话:
唯一真正安全的系统是关闭电源、浇筑在混凝土块中并密封在配备武装警卫的铅制房间内的系统——即便如此,我仍有疑问。
如果您环顾四周,您会发现各种问题,其中用户试图安全地加密/解密连接字符串、将数据安全地存储在他们的程序(或数据库)中,或者尽最大努力留住任何人——甚至他们最信任的用户 - 获得他们原本不应该拥有的访问权限。
虽然恶意用户不太可能尝试访问您服务器上的文件,但我可以告诉您,恶意用户访问我服务器上的文件要困难得多,因为那些文件在我的服务器上不存在。
【解决方案2】:
确保您的 IIS 设置意味着不会公开提供 .cs 文件。这应该与任何敏感或非公共文件类型相同,例如 .config。
.aspx 文件包含您的标记,因此通常可以公开发布和提供。