忽略IIS下的.svn目录


8

我们是一个Web开发组织,最近已转向使用Subversion作为版本控制系统。由于执行更新要比导出和复制文件快得多,因此开发人员希望能够将生产服务器作为工作副本。

我对此唯一关心的是整个系统中乱七八糟的所有.svn文件,以及某些企业用户可能会读取其中文件的内容这一事实,可能会为他们提供我们宁愿他们没有的信息。

阻止IIS在这些.svn目录中提供任何内容的最佳/最简便方法是什么?


1
你好。您能否说明在.svn中需要关注的信息类型,而这些信息在已部署的文件中将不可用?
地理位置

什么版本的IIS?如果使用IIS7,则可以获得URL重写模块,并只需设置一个简单规则即可忽略.svn目录。
MattB

1
@Geo-.svn目录包含基于文本的文件的纯文本副本。由于文件在此处被命名为相同的文件,仅附加了.svn-base,因此人们可以以纯文本格式查看代码(这是经典的ASP网站)。我们宁愿不发生这种情况。
cdeszaq

@MattB-服务器目前为IIS6,但最终将切换为IIS7。因此,在切换之后,我将研究重写模块,但是不幸的是,服务器现在是IIS6。
cdeszaq

Answers:


8

“不要那样做”不会回答这个问题。

实际上,我喜欢在生产服务器上拥有工作副本,因为这样我就可以在生产中进行快速更改(谁从未做过此更改?)并将其重新签入。这取决于您希望安全/便利滑块在何处以及在许多情况下,这是一个好地方。

Apacheland中的标准解决方案是将.svn文件保留在此处,但告诉Web服务器不要提供它们。这是在Windows 2000-2008上使用IIS 5-7的方法。

  1. 下载并安装ISAPI_Rewrite-精简版就足够了。请注意Win 2008的其他系统要求警告 -MSI安装程序将停止并启动IIS。

  2. 取消选中httpd.ini文件属性上的“只读”框。如果您使用的是MSI安装程序,则在Helicon-> ISAPI_Rewrite下的“开始”菜单中有一个指向httpd.ini文件的快捷方式。

  3. 将这些行添加到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。


我没有注意到我安装了旧版本ISAPI_Rewrite2。较新的版本ISAPI_Rewrite3包含一个名为“ ISAPI_Rewrite Manager”的应用程序,使该文件的编辑更加轻松,并且在Window 2008 Server上,它似乎不需要重新启动IIS。:另外,我已经与我的博客更多的一些细节发表在这个n8v.enteuxis.org/2009/11/...
内森

“不要那样做”不会回答这个问题。-简而言之stackoverflow。感谢您直接解决此问题。
约翰·哈格罗夫

5

您可以确保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”)


那真是天才!
理查德·斯莱特2009年

5

使用IIS 7,打开IIS管理器,选择服务器节点,双击“ 处理程序映射”功能。单击操作“ 添加托管处理程序”并按如下所示配置处理程序:

  • 请求路径:* .svn / *(所有.svn文件夹中所有文件的通配符映射)
  • 类型:System.Web.HttpForbiddenHandler
  • 名称:Subversion元数据(如果愿意,可以选择其他名称)

现在,对所有站点中名为.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或进行通配符映射(将影响性能),您可以阻止请求更多文件。


4

从纯粹的安全角度来看,我会重新培训您的开发人员。

如果您牺牲了安全性,那么易于部署不一定是一个好主意。

您正在计划配置以阻止对敏感信息的访问。如果配置意外更改会发生什么。如果IIS hotFix崩溃并更改配置的工作方式,会发生什么情况。如果您使用的第3方库出现故障并停止工作,会发生什么情况。我可以想到几个极有可能发生的事件,这些事件会破坏您的配置并允许访问这些文件,而由于首先没有在服务器上放置这些文件,因此完全可以避免这种情况。

您应该创建一个部署脚本,该脚本从登台服务器复制适当的文件。您甚至可以通过SVN暂存到Prod上的其他目录。

要进行部署,可以使用RoboCopy和/ XD命令排除.svn目录。您可以使用Microsoft Web部署工具并以此限制目录。for /r YOURPATH %f in (.svn) do rd /s /q "%f"如果需要,您可以部署并运行以上内容。

只是不要将这些目录部署到生产网站。


1

不要使用颠覆。说真的

从您的评论看来,您正在使用错误的工具来完成工作。对于您的开发人员来说,Subversion是一个很好的工具,但它不是部署/镜像工具。如果您的目标是仅使用最少的带宽和时间将文件从登台/测试服务器简单复制到生产服务器,那么建议您使用rsync。现在,由于我是Unix管理员,所以可能存在一些我不了解的等效于rsync的Windows,因此您可能需要进行一些研究。但是,您可以在Cygwincwrsync下使用rsync 。

Rsync允许您将一台服务器上的目录镜像到另一台服务器上的目录。它计算两个服务器之间的增量,复制差异。不仅如此,它还能压缩增量,并且可以选择对其进行加密。


.... +1 for rsync
Jason S

第二。尝试主动隐藏文件的主要问题是,如果您放置的处理程序或重写规则掉线,所有文件都会突然再次暴露。如果您的工作副本位于测试或私有部署环境中,那么您所需要的只是一个红色的大“发布”按钮(一个小脚本),该按钮从该位置同步到实时服务器。rsync可以轻松配置为忽略文件路径/模式,并在心跳中上载大多数更改,几乎与您当前的设置一样方便。
SmallClanger

0

最佳实践是在进行SVN更新后导出并发布的自动部署系统。以哈德森为例。还有很多,但是由于我们不需要一个,所以我的信息也不多

加的特Greetz


由于带宽和连接速度等诸多问题,我们希望避免导出。更新仅涉及已更改的内容,这极大地限制了涉及的内容,这对我们来说是一个主要因素。此外,我们不希望事物自动更新,因此CC.Net的哈德森(Hudson)会提供这些信息,但这里对我们没有帮助,因为我们将手动更新产品。
cdeszaq

如果您手动更新,为什么不将WC放在Web服务器不提供的区域中,然后将更新的文件从该目录复制到提供的目录中。您可以获得快速的网络更新的好处,但会占用一些磁盘空间。
gbjbaanb

0

我在生产服务器上安排了一个脚本,该脚本搜索.svn并删除文件。我认为这不适用于您的情况。

for /r YOURPATH %f in (.svn) do rd /s /q "%f"

如果无法删除文件,则可以通过IIS(密码或IP限制)为目录提供基本安全性。这将阻止IIS向未经授权的用户提供内容。

祝好运!


删除.svn目录不是一个选择,因为我们将失去工作副本功能。有没有一种可脚本化的方式来搜索树并添加这些IIS限制?手动执行此操作的任务太大,并且会破坏Subversion提供的自动化。
cdeszaq

毫无疑问。我以前没有编写过类似的脚本,所以希望有人回应。
狙击手2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.