我们是一个Web开发组织,最近已转向使用Subversion作为版本控制系统。由于执行更新要比导出和复制文件快得多,因此开发人员希望能够将生产服务器作为工作副本。
我对此唯一关心的是整个系统中乱七八糟的所有.svn文件,以及某些企业用户可能会读取其中文件的内容这一事实,可能会为他们提供我们宁愿他们没有的信息。
阻止IIS在这些.svn目录中提供任何内容的最佳/最简便方法是什么?
我们是一个Web开发组织,最近已转向使用Subversion作为版本控制系统。由于执行更新要比导出和复制文件快得多,因此开发人员希望能够将生产服务器作为工作副本。
我对此唯一关心的是整个系统中乱七八糟的所有.svn文件,以及某些企业用户可能会读取其中文件的内容这一事实,可能会为他们提供我们宁愿他们没有的信息。
阻止IIS在这些.svn目录中提供任何内容的最佳/最简便方法是什么?
Answers:
“不要那样做”不会回答这个问题。
实际上,我喜欢在生产服务器上拥有工作副本,因为这样我就可以在生产中进行快速更改(谁从未做过此更改?)并将其重新签入。这取决于您希望安全/便利滑块在何处以及在许多情况下,这是一个好地方。
Apacheland中的标准解决方案是将.svn文件保留在此处,但告诉Web服务器不要提供它们。这是在Windows 2000-2008上使用IIS 5-7的方法。
下载并安装ISAPI_Rewrite-精简版就足够了。请注意Win 2008的其他系统要求。 警告 -MSI安装程序将停止并启动IIS。
取消选中httpd.ini文件属性上的“只读”框。如果您使用的是MSI安装程序,则在Helicon-> ISAPI_Rewrite下的“开始”菜单中有一个指向httpd.ini文件的快捷方式。
将这些行添加到httpd.ini:
httpd.ini中的 ISAPI_Rewrite指令:
# Deny access to Subversion working copy administrative
# directories (.svn) and their contents
RewriteRule .*/\.svn\b.* . [F,I,O]
现在,对.svn目录或其内容的任何请求都将导致从服务器找不到404。
您可以确保IIS使用的任何用户帐户都没有访问.svn目录的权限。
您可以手动执行此操作(不建议这样做),也可以使用诸如MrJangles删除脚本之类的方法,该脚本在执行SVN更新后触发运行或作为计划任务定期运行:
for /r YOURPATH %f in (.svn) do icacls /deny <name_of_iis_user>:F "%f"
(注意:我尚未测试上面的内容,您需要在生产中依赖它之前检查它是否正在尝试执行操作,有关更多信息,请参见“ icacls / help”的输出)
(另一注:“ icacls”是Vista / 2008命令,在较早的Windows变体中,该命令是“ cacls”)
使用IIS 7,打开IIS管理器,选择服务器节点,双击“ 处理程序映射”功能。单击操作“ 添加托管处理程序”并按如下所示配置处理程序:
现在,对所有站点中名为.svn的Subversion元数据文件夹中的文件的任何请求都应返回以下内容:
“ /”应用程序中的服务器错误。
无法提供此类页面。
说明:由于明确禁止了您请求的页面类型,因此无法提供。请查看下面的URL,并确保其拼写正确。
要求的网址:/.svn/text-base/Default.aspx.svn-base
您可以根据需要选择其他处理程序类型,也许是FileNotFound处理程序,它将返回404状态代码。
对于IIS 6(已安装和配置ASP.NET 2):
导航到主目录>配置>映射,并将.svn-base
扩展名映射到%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
。然后,在machine.config(可在中找到%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG
)中,您可以为扩展名添加与上述相同的处理程序,并添加以下XML元素作为<httpHandlers>
-element 的子元素:
<add verb="*" path="*.svn-base" type="System.Web.HttpForbiddenHandler"/>
这只会阻止访问者请求源代码文件,他们仍然可以从.svn文件夹中请求其他文件。将更多扩展名映射到aspnet_isapi.dll或进行通配符映射(将影响性能),您可以阻止请求更多文件。
从纯粹的安全角度来看,我会重新培训您的开发人员。
如果您牺牲了安全性,那么易于部署不一定是一个好主意。
您正在计划配置以阻止对敏感信息的访问。如果配置意外更改会发生什么。如果IIS hotFix崩溃并更改配置的工作方式,会发生什么情况。如果您使用的第3方库出现故障并停止工作,会发生什么情况。我可以想到几个极有可能发生的事件,这些事件会破坏您的配置并允许访问这些文件,而由于首先没有在服务器上放置这些文件,因此完全可以避免这种情况。
您应该创建一个部署脚本,该脚本从登台服务器复制适当的文件。您甚至可以通过SVN暂存到Prod上的其他目录。
要进行部署,可以使用RoboCopy和/ XD命令排除.svn目录。您可以使用Microsoft Web部署工具并以此限制目录。for /r YOURPATH %f in (.svn) do rd /s /q "%f"
如果需要,您可以部署并运行以上内容。
只是不要将这些目录部署到生产网站。
不要使用颠覆。说真的
从您的评论看来,您正在使用错误的工具来完成工作。对于您的开发人员来说,Subversion是一个很好的工具,但它不是部署/镜像工具。如果您的目标是仅使用最少的带宽和时间将文件从登台/测试服务器简单复制到生产服务器,那么建议您使用rsync。现在,由于我是Unix管理员,所以可能存在一些我不了解的等效于rsync的Windows,因此您可能需要进行一些研究。但是,您可以在Cygwin或cwrsync下使用rsync 。
Rsync允许您将一台服务器上的目录镜像到另一台服务器上的目录。它计算两个服务器之间的增量,仅复制差异。不仅如此,它还能压缩增量,并且可以选择对其进行加密。
最佳实践是在进行SVN更新后导出并发布的自动部署系统。以哈德森为例。还有很多,但是由于我们不需要一个,所以我的信息也不多
加的特Greetz