忽略 IIS 下的 .svn 目录

cde*_*zaq 8 iis svn

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

我唯一担心的是整个系统中散布的所有 .svn 文件,以及一些企业个人可能会读取其中文件的内容,可能会向他们提供我们宁愿他们没有的信息.

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

Nat*_*han 8

“不要那样做”并没有回答这个问题。

实际上,我喜欢在生产服务器上有一个工作副本,因为这样我可以在生产中进行快速更改(谁从未这样做过?)并重新检查它们。这取决于您想要安全/便利滑块的位置,以及在许多情况下,这是一个好地方。

Apacheland 中的标准解决方案是将 .svn 文件留在那里,但告诉 Web 服务器永远不要为它们提供服务。以下是在 Windows 2000-2008 上使用 IIS 5-7 执行此操作的方法。

  1. 下载并安装ISAPI_Rewrite -- Lite 版本足以满足此目的。请注意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]
Run Code Online (Sandbox Code Playgroud)

现在,对 .svn 目录或其内容的任何请求都将导致来自服务器的 404 Not Found。


Dav*_*ett 5

您可以确保 IIS 使用的任何用户帐户都没有访问 .svn 目录的权限。

您可以手动执行此操作(不推荐)或使用类似 MrJangles 删除脚本的内容,要么在您执行 SVN 更新后触发运行,要么作为计划任务定期运行:

for /r YOURPATH %f in (.svn) do icacls /deny <name_of_iis_user>:F "%f"
Run Code Online (Sandbox Code Playgroud)

(注意:我没有测试过上面的内容,在生产中依赖它之前,您需要检查它的功能,请参阅“icacls /help”的输出以获取更多信息)

(另一个注意事项:“icacls”是一个 Vista/2008 命令,在早期的 Windows 变体中,该命令是“cacls”)


Mic*_*out 5

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

  • 请求路径:*.svn/*(所有 .svn 文件夹中所有文件的通配符映射)
  • 类型:System.Web.HttpForbiddenHandler
  • 名称:Subversion-metadata(您可以根据需要选择不同的名称)

现在,对所有站点中名为 .svn 的 Subversion 元数据文件夹中的文件的任何请求都应返回:

“/”应用程序中的服务器错误。

不提供此类页面。

描述:您请求的页面类型未被提供,因为它已被明确禁止。请检查下面的 URL 并确保其拼写正确。

请求的 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"/>
Run Code Online (Sandbox Code Playgroud)

这只会阻止访问者请求源代码文件,他们仍然可以从 .svn 文件夹中请求其他文件。将更多扩展名映射到 aspnet_isapi.dll 或进行通配符映射(会影响性能),您可以阻止请求更多文件。


小智 0

最佳实践是在 SVN 更新后导出和发布的自动部署系统。以哈德逊为例。还有一些,但由于我们不需要,所以我不太了解情况

格雷茨,Ghad