Ignorando diretórios .svn no IIS

8

Somos uma organização de desenvolvimento web e recentemente passamos a usar o subversion para o nosso sistema de controle de versão. Como a execução de uma atualização é muito mais rápida do que exportar e copiar os arquivos, os desenvolvedores desejam que o servidor de produção seja uma cópia de trabalho.

A única preocupação que tenho com isso são todos os arquivos .svn espalhados pelo sistema, e o fato de que algum indivíduo da empresa poderia, potencialmente, ler o conteúdo dos arquivos lá, possivelmente dando-lhes informações que prefeririam não tinha.

Qual é a maneira melhor / mais fácil de impedir que o IIS exiba qualquer conteúdo desses diretórios .svn?

    
por cdeszaq 10.06.2009 / 15:41

7 respostas

8

"Não faça assim" não responde à pergunta.

Praticamente, gosto de ter uma cópia de trabalho no servidor de produção, porque assim posso fazer alterações rápidas na produção (quem nunca fez isso?) e fazer o check-in. Depende de onde você deseja sua segurança / conveniência controle deslizante e, em muitos casos, este é um bom lugar.

A solução padrão no Apacheland é deixar os arquivos .svn, mas dizer ao servidor da Web para nunca atendê-los. Veja como fazer isso com o IIS 5-7 no Windows 2000-2008.

  1. Faça o download e instale ISAPI_Rewrite - a versão Lite será suficiente para essa finalidade. Anote os requisitos do sistema extras para o Win 2008. Aviso - o instalador do MSI para e inicia o IIS.

  2. Desmarque a caixa "somente leitura" nas propriedades do arquivo link . Se você usou o instalador MSI, o therer é um atalho para o arquivo link no menu Iniciar em Helicon- > ISAPI_Rewrite

  3. Adicione estas linhas ao link :

Diretivas ISAPI_Rewrite no link :

# Deny access to Subversion working copy administrative
#  directories (.svn) and their contents
RewriteRule .*/\.svn\b.* . [F,I,O]

Agora, qualquer solicitação para um diretório .svn ou seu conteúdo resultará em um 404 Not Found do servidor.

    
por 11.11.2009 / 01:36
5

Você pode garantir que as contas de usuário usadas pelo IIS não tenham direitos de acesso aos diretórios .svn.

Você pode fazer isso manualmente (não recomendado) ou usar algo como o script de exclusão MrJangles, que é acionado para ser executado após a atualização do SVN ou ser executado regularmente como uma tarefa agendada:

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

(nota: Eu não testei o acima, você precisa verificar se ele faz o que está tentando antes de confiar na produção, veja a saída de "icacls / help" para mais informações)

(outra nota: "icacls" é um comando do Vista / 2008, em versões anteriores do Windows o comando é "cacls")

    
por 10.06.2009 / 18:02
5

Usando o IIS 7, abra o Gerenciador do IIS, selecione o nó do servidor, clique duas vezes no recurso Mapeamento do manipulador . Clique na ação Adicionar manipulador gerenciado e configure o manipulador da seguinte forma:

  • Caminho de solicitação: *. svn / * (mapeamento de curingas para todos os arquivos em todas as pastas .svn)
  • Tipo: System.Web.HttpForbiddenHandler
  • Nome: Metadados do Subversion (você pode escolher um nome diferente, se desejar)

Agora, qualquer solicitação de arquivos nas pastas de metadados do Subversion denominadas .svn em todos os sites deve retornar isso:

Server Error in '/' Application.

This type of page is not served.

Description: The type of page you have requested is not served because it has been explicitly forbidden. Please review the URL below and make sure that it is spelled correctly.

Requested URL: /.svn/text-base/Default.aspx.svn-base

Você pode escolher um tipo de manipulador diferente, se desejar, talvez um manipulador FileNotFound que retornará um código de status 404.

Para o IIS 6 (com o ASP.NET 2 instalado e configurado):

Navegue até o diretório principal > Configuração > Mapear e mapear a extensão .svn-base para %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll . Em seguida, em machine.config (que você pode encontrar em %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG ), você pode adicionar o mesmo manipulador acima para a extensão, adicionar o seguinte elemento XML como filho do <httpHandlers> -element:

<add verb="*" path="*.svn-base" type="System.Web.HttpForbiddenHandler"/>

Isso só impedirá que os visitantes solicitem os arquivos do código-fonte, eles ainda poderão solicitar outros arquivos das pastas .svn. Mapeie mais extensões para aspnet_isapi.dll ou crie um mapeamento curinga (afetará o desempenho) e você poderá bloquear a solicitação de mais arquivos.

    
por 18.11.2010 / 11:28
4

Do ponto de vista de segurança, eu reedico seus desenvolvedores.

A facilidade de implantação não é necessariamente uma boa ideia se você sacrificar a segurança.

Você está planejando uma configuração para bloquear o acesso a informações confidenciais. O que acontece se a configuração mudar acidentalmente. O que acontece se um hotFix do IIS for desativado e mudar o funcionamento de sua configuração. O que acontece se a biblioteca de terceiros usar falhas e parar de funcionar. Posso pensar em vários eventos extremamente prováveis que quebrariam sua configuração e permitiriam o acesso a esses arquivos, o que seria TOTALMENTE MITIGADO por não ter os arquivos no servidor em primeiro lugar.

Você deve criar um script de implantação que copie os arquivos apropriados de um servidor de armazenamento temporário. Você poderia até mesmo via SVN para um diretório diferente no Prod.

Para implantar, você pode usar o RoboCopy e o comando / XD para excluir os diretórios .svn. Você pode usar a ferramenta de implantação da Web da Microsoft e limitar os diretórios a isso. Você pode implantar e executar o for /r YOURPATH %f in (.svn) do rd /s /q "%f" acima, se precisar também.

Apenas não implemente esses diretórios no site de produção.

    
por 10.06.2009 / 18:33
1

Não use subversão. A sério.

A partir dos seus comentários, parece que você está usando a ferramenta errada para o trabalho. O Subversion é uma ótima ferramenta para seus desenvolvedores, mas não é uma ferramenta de implantação / espelhamento. Se o seu objetivo é simplesmente copiar os arquivos do seu servidor de teste / teste para o seu servidor de produção com um mínimo de largura de banda e tempo, sugiro que você use rsync . Agora, como eu sou um administrador do Unix, pode haver algum equivalente do Windows ao rsync que eu não conheça, então você pode querer fazer alguma pesquisa. No entanto, você pode usar o rsync em Cygwin ou cwrsync .

O Rsync permite espelhar diretórios em um servidor com diretórios em outro. Calcula um delta entre os dois servidores e o somente copia as diferenças. Não só isso, mas comprime o delta e, opcionalmente, pode criptografá-lo também.

    
por 23.07.2009 / 17:52
0

A melhor prática seria um sistema de implantação automática que exporta e publica depois que uma atualização do SVN é feita. Considere Hudson por exemplo. Há mais alguns, mas como não precisamos de um, não estou muito bem informado

Greetz, GHad

    
por 10.06.2009 / 15:44
0

Eu programei um script em meus servidores de produção que procura por .svn e simplesmente exclui os arquivos. Eu não acho que isso funcionará no seu caso.

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

Se a remoção dos arquivos não for uma opção, você poderá colocar a segurança básica nos diretórios por meio do IIS (senha ou restrições de IP). Isso impediria o IIS de exibir conteúdo para usuários não autorizados.

Boa sorte!

    
por 10.06.2009 / 16:22

Tags