Ignorando le directory .svn in IIS


8

Siamo un'organizzazione di sviluppo web e recentemente siamo passati all'utilizzo della sovversione per il nostro sistema di controllo delle versioni. Poiché l'esecuzione di un aggiornamento è molto più rapida rispetto all'esportazione e alla copia dei file, gli sviluppatori vogliono essere in grado di fare in modo che il server di produzione sia una copia funzionante.

L'unica preoccupazione che ho con questo è tutti i file .svn disseminati nel sistema, e il fatto che un individuo di impresa potrebbe, potenzialmente, leggere il contenuto dei file lì dentro, probabilmente dando loro informazioni che preferiremmo non avere .

Qual è il modo migliore / più semplice per impedire a IIS di pubblicare qualsiasi contenuto all'interno di quelle directory .svn?


1
Ciao. Potresti chiarire che tipo di informazioni ti interessano avere .svn che non saranno già disponibili nei file distribuiti?
Geo,

Quale versione di IIS? Se IIS7 potresti ottenere l'URL Rewrite Module e semplicemente impostare una semplice regola per ignorare le directory .svn.
MattB,

1
@Geo - le directory .svn contengono copie in chiaro dei file in base di testo. Dato che i file hanno lo stesso nome lì dentro, solo con l'aggiunta di .svn-base, le persone potevano visualizzare il codice in testo normale (questo è un classico sito ASP). Preferiremmo non farlo accadere.
cdeszaq,

@MattB: il server è IIS6 in questo momento, ma alla fine passa a IIS7. Quindi, esaminerò il modulo di riscrittura dopo lo switch, ma sfortunatamente, il server è IIS6 in questo momento.
cdeszaq,

Risposte:


8

"Non farlo in questo modo" non risponde alla domanda.

In pratica, mi piace avere una copia funzionante sul server di produzione, perché in questo modo posso apportare rapidi cambiamenti nella produzione (chi non lo ha mai fatto?) E ricontrollarli. Dipende da dove vuoi il cursore di sicurezza / convenienza e in molti casi questo è un buon posto.

La soluzione standard in Apacheland è lasciare lì i file .svn ma dire al server Web di non servirli mai. Ecco come farlo con IIS 5-7 su Windows 2000-2008.

  1. Scarica e installa ISAPI_Rewrite - la versione Lite sarà sufficiente per questo scopo. Nota requisiti di sistema aggiuntivi per Win 2008. Avviso : il programma di installazione MSI si arresta e avvia IIS.

  2. Deseleziona la casella "sola lettura" nelle proprietà del file httpd.ini . Se hai utilizzato il programma di installazione MSI, c'è un collegamento al file httpd.ini nel menu Start in Helicon-> ISAPI_Rewrite

  3. Aggiungi queste righe a httpd.ini :

Direttive ISAPI_Rewrite in httpd.ini :

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

Ora, qualsiasi richiesta per una directory .svn o il suo contenuto comporterà un 404 non trovato dal server.


Non ho notato che ho installato la versione precedente, ISAPI_Rewrite2. La versione più recente, ISAPI_Rewrite3, include un'app denominata "ISAPI_Rewrite Manager" che semplifica leggermente la modifica del file e su Windows 2008 Server non sembrava richiedere il riavvio di IIS. Inoltre, l'ho pubblicato con qualche dettaglio in più sul mio blog: n8v.enteuxis.org/2009/11/…
Nathan

"Non farlo in questo modo" non risponde alla domanda. - StackOverflow in breve. Grazie per aver risposto direttamente alla domanda.
John Hargrove,

5

È possibile assicurarsi che tutti gli account utente utilizzati da IIS non dispongano dei diritti di accesso alle directory .svn.

Puoi farlo manualmente (non consigliato) o utilizzare qualcosa come lo script di eliminazione MrJangles attivato o avviato dopo aver eseguito l'aggiornamento SVN o eseguito regolarmente come attività pianificata:

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

(nota: non ho testato quanto sopra, dovrai controllare che faccia quello che sta cercando prima di fare affidamento su di esso in produzione, vedere l'output di "icacls / help" per maggiori informazioni)

(un'altra nota: "icacls" è un comando Vista / 2008, invece nelle varianti precedenti di Windows il comando è "cacls")


Questo è puro genio!
Richard Slater,

5

Utilizzando IIS 7, aprire Gestione IIS, selezionare il nodo del server, fare doppio clic sulla funzionalità Mapping gestori . Fare clic sull'azione Aggiungi gestore gestito e configurare il gestore come segue:

  • Percorso richiesta: * .svn / * (mapping dei caratteri jolly per tutti i file in tutte le cartelle .svn)
  • Tipo: System.Web.HttpForbiddenHandler
  • Nome: metadati Subversion (puoi scegliere un nome diverso se vuoi)

Ora qualsiasi richiesta di file nelle cartelle dei metadati di Subversion denominate .svn in tutti i siti dovrebbe restituire questo:

Errore del server nell'applicazione '/'

Questo tipo di pagina non è disponibile.

Descrizione: il tipo di pagina che hai richiesto non viene pubblicato perché è stato esplicitamente vietato. Controlla l'URL seguente e assicurati che sia stato digitato correttamente.

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

Se lo desideri, puoi scegliere un tipo di gestore diverso, magari un gestore FileNotFound che restituirà un codice di stato 404.

Per IIS 6 (con ASP.NET 2 installato e configurato):

Passare alla directory Home> Configurazione> Mappatura e mappare l' .svn-baseestensione a %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll. Quindi in machine.config (che puoi trovare %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG) puoi aggiungere lo stesso gestore come sopra per l'estensione, aggiungere il seguente elemento XML come figlio dell'elemento <httpHandlers>:

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

Ciò impedirà ai visitatori di richiedere solo i file del codice sorgente, ma potrebbero comunque richiedere altri file dalle cartelle .svn. Mappa più estensioni su aspnet_isapi.dll o crea un mapping jolly (influirà sulle prestazioni) e potresti bloccare la richiesta di più file.


4

Da un puro punto di vista della sicurezza, rieducerei i tuoi sviluppatori.

La facilità di implementazione non è necessariamente una buona idea se si sacrifica la sicurezza.

Stai pianificando una configurazione per bloccare l'accesso a informazioni riservate. Cosa succede se la configurazione cambia accidentalmente. Cosa succede se un hotfix IIS si interrompe e cambia il modo in cui funziona la configurazione. Cosa succede se la libreria di terze parti utilizzata si guasta e smette di funzionare. Riesco a pensare a diversi eventi estremamente probabili che potrebbero interrompere la configurazione e consentire l'accesso a questi file, che sarebbero TOTALMENTE MITIGATI non avendo i file sul server in primo luogo.

È necessario creare uno script di distribuzione che copia i file appropriati da un server di gestione temporanea. È anche possibile mettere in scena tramite SVN in un'altra directory su Prod.

Per distribuire, è possibile utilizzare RoboCopy e il comando / XD per escludere le directory .svn. È possibile utilizzare lo strumento di distribuzione Web Microsoft e limitare le directory con quello. Se necessario, è possibile distribuire ed eseguire quanto sopra for /r YOURPATH %f in (.svn) do rd /s /q "%f".

Basta non distribuire queste directory sul sito Web di produzione.


1

Non usare la sovversione. Sul serio.

Dai tuoi commenti sembra che stai usando lo strumento sbagliato per il lavoro. Subversion è un ottimo strumento per i tuoi sviluppatori, ma non è uno strumento di distribuzione / mirroring. Se il tuo obiettivo è semplicemente copiare i file dal tuo server di staging / test sul tuo server di produzione con un minimo di larghezza di banda e tempo, allora ti suggerisco di usare rsync . Ora, dato che sono un amministratore Unix, potrebbero esserci alcuni equivalenti di Windows a rsync di cui non sono a conoscenza, quindi potresti voler fare qualche ricerca. Tuttavia, è possibile utilizzare rsync in Cygwin o cwrsync .

Rsync consente di eseguire il mirroring delle directory su un server con le directory su un altro. Calcola un delta tra i due server e copia solo le differenze. Non solo, ma comprime il delta e, facoltativamente, può anche crittografarlo.


.... +1 per rsync
Jason S

Distaccato. Il problema principale nel tentativo di nascondere attivamente i file è che se il gestore o la regola di riscrittura che hai messo in atto cade, tutti i file vengono improvvisamente esposti di nuovo. Se hai la tua copia di lavoro in un ambiente di test o di distribuzione privato e tutto ciò di cui hai bisogno è un grande pulsante rosso "pubblica" (un piccolo script) che risincronizza da quella posizione al server live. rsync può essere facilmente configurato per ignorare percorsi / schemi di file e caricherà la maggior parte delle modifiche in un batter d'occhio, ed è quasi comodo quanto la tua attuale configurazione.
SmallClanger,

0

Le migliori pratiche sarebbero un sistema di distribuzione automatica che esporta e pubblica dopo aver effettuato un aggiornamento SVN. Considera Hudson per esempio. Ce ne sono pochi altri, ma poiché non ne abbiamo bisogno, non sono molto ben informato

Salve, GHad


Vogliamo evitare l'esportazione a causa di una serie di problemi, come larghezza di banda e velocità di connessione. L'aggiornamento esegue solo il pull delle cose che sono cambiate, il che limita drasticamente la quantità di cose trasferite, il che è un fattore importante per noi. Inoltre, non vogliamo che le cose si aggiornino automaticamente, quindi mentre Hudson di CC.Net lo fornirebbe, non ci aiuta qui perché aggiorneremo la produzione manualmente.
cdeszaq,

se si aggiorna manualmente, perché non avere il proprio WC in un'area non servita dal server web e copiare i file aggiornati da quella directory nella directory che viene servita. Ottieni il vantaggio di un rapido aggiornamento della rete, a scapito di un po 'di spazio su disco.
gbjbaanb,

0

Pianifico uno script sui miei server di produzione che cerca .svn ed elimina semplicemente i file. Non penso che funzionerà nel tuo caso.

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

Se la rimozione dei file non è un'opzione, è possibile inserire la protezione di base nelle directory tramite IIS (password o restrizioni IP). Ciò impedirebbe a IIS di pubblicare contenuti per utenti non autorizzati.

In bocca al lupo!


Rimuovere le directory .svn non è un'opzione, perché perderemmo le funzionalità di copia funzionante. Esiste un modo gestibile tramite script per eseguire ricerche in un albero e aggiungere quelle restrizioni IIS? Il compito di farlo manualmente è troppo grande e perde l'automazione fornita da Subversion.
cdeszaq,

Non c'è dubbio. Non ho mai scritto nulla di simile prima, quindi speriamo che qualcun altro risponda.
Snipper,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.