Ignorare le directory .svn sotto IIS

Siamo un'organizzazione per lo sviluppo di siti web e siamo recentemente spostati nell'utilizzo di sovversioni per il nostro sistema di controllo delle versioni. Poiché l'esecuzione di un aggiornamento è molto più veloce di eseguire un'esportzione e la copia dei file, gli sviluppatori vogliono avere il server di produzione come copia di lavoro.

L'unica preoccupazione che ho con questo è che tutti i file .vn sono stati ripresi in tutto il sistema e il fatto che alcuni individui aziendali possano potenzialmente leggere il contenuto dei file presenti, forse fornendo loro informazioni che preferirebbero di non avere .

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

  • SVN si blocca su commit - tutti i suggerimenti per la risoluzione dei problemi?
  • Subversion COPY / MOVE - File non trovato: transazione 'XXX-XX'
  • Autorizzazione di Subversion
  • Configurazione del server SVN ottimale per uso personale
  • Deduplicazione dati NTFS di Windows Server 2012R2 e client SVN
  • come eseguire il backup svn in remoto senza una copia locale
  • Codice semplice per installare un repository di sovversione su un server linux
  • Come dovremmo creare un server web che supporti lo sviluppo in corso?
  • 7 Solutions collect form web for “Ignorare le directory .svn sotto IIS”

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

    Praticamente, mi piace avere una copia di lavoro sul server di produzione, perché in questo modo posso modificare rapidamente la produzione (che non l'ha mai fatto?) E controllarle nuovamente. Dipende da where vuoi il tuo dispositivo di sicurezza / comodità e in molti casi questo è un buon posto.

    La soluzione standard in Apacheland è quella di lasciare i file .svn ma dirà al server web di non servirli mai. Ecco come farlo con IIS 5-7 in Windows 2000-2008.

    1. Scaricare e installare ISAPI_Rewrite – la versione Lite sarà sufficiente per questo scopo. Nota i requisiti di sistema aggiuntivi per Win 2008. Avviso – il programma di installazione MSI si ferma e avvia l'IIS.

    2. Deseleziona la casella "sola lettura" nelle properties; del file httpd.ini . Se si utilizza l'installatore MSI, therer è un collegamento al file httpd.ini nel menu Start sotto Helicon-> ISAPI_Rewrite

    3. Aggiungi queste righe a httpd.ini :

    Le 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 risulterà un 404 non trovato dal server.

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

    Puoi farlo manualmente (non consigliato) oppure utilizzare qualcosa come il command di eliminazione MrJangles che verrà avviato dopo l'aggiornamento di SVN o il funzionamento regolarmente come un'attività pianificata:

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

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

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

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

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

    Ora each richiesta di file in cartelle metadati di Subversion denominata .svn in tutti i siti dovrebbe restituire questo:

    Errore del server nell'applicazione '/'

    Questo tipo di pagina non viene pubblicata.

    Descrizione: Il tipo di pagina che hai richiesto non viene pubblicato perché è stato espressamente vietato. Rivedere l'URL sotto e assicurarsi che sia correttamente ortografato.

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

    Puoi scegliere un tipo di gestore diverso, se vuoi, forse 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> Mappare e mappare l'estensione .svn-base in %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll . Quindi, in machine.config (che si trova in %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG ) è ansible aggiungere lo stesso gestore come sopra per l'estensione, aggiungere il seguente elemento XML come figlio della <httpHandlers> :

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

    Ciò impedirà solo ai visitatori di richiedere i file di codice sorgente, ma potrebbero richiedere altri file dalle cartelle .svn. Caricare altre estensioni per aspnet_isapi.dll o creare una mapping di caratteri jolly (influenzerà le performance) e potrebbe bloccare altri file da richiedere.

    A partire da un punto di vista puro, riformavo i tuoi sviluppatori.

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

    Stai progettando una configuration per bloccare l'accesso a informazioni sensibili. Cosa succede se la configuration cambia accidentalmente? Cosa succede se un hotFix di IIS viene distriggersto e cambia come funziona la tua configuration. Cosa succede se la biblioteca di terze parti usa i guasti e smette di funzionare. Posso pensare a diversi events estremamente probabili che potrebbero rompere la configuration e consentire l'accesso a questi file, che sarebbero totalmente messi in atto da non avere i file sul server in primo luogo.

    È necessario creare uno script di distribuzione che copia i file appropriati da un server di gestione temporanea. Potresti anche mettere via via SVN in una directory diversa su Prod.

    Per distribuire, è ansible utilizzare RoboCopy e il command / XD per escludere le directory .svn. È ansible utilizzare lo strumento di distribuzione Web di Microsoft e limitare le directory con quella. È ansible distribuire e eseguire il precedente for /r YOURPATH %f in (.svn) do rd /s /q "%f" se ne hai bisogno.

    Proprio non distribuire queste directory al sito web di produzione.

    Non usare sovversione. Sul serio.

    Dai tuoi commenti sembra che utilizzi lo strumento sbagliato per il lavoro. Subversion è un ottimo strumento per i vostri sviluppatori, ma non è uno strumento di distribuzione / mirroring. Se il tuo objective è quello di copiare semplicemente i file dal server di staging / test al server di produzione con un minimo di width di banda e di tempo, ti suggerisco di utilizzare rsync . Ora, poiché sono un amministratore di Unix, potrebbe esserci qualche equivalente di Windows a rsync che non conosco, per cui potresti voler fare qualche ricerca. Tuttavia, è ansible utilizzare rsync in Cygwin o cwrsync .

    Rsync consente di mirrorare le directory su un server con le directory in un altro. Calcola un delta tra i due server e copia solo le differenze. Non solo, ma compressa il delta e, opzionalmente, può anche crittografarlo.

    La migliore pratica sarebbe un sistema di distribuzione automatico che esport e pubblica dopo l'aggiornamento di un SVN. Considerate Hudson ad esempio. Ci sono pochi altri, ma poiché non abbiamo bisogno di uno, non sono molto ben informato

    Greetz, GHad

    Programmi uno script nei miei server di produzione che ricercano il file .svn e cancella semplicemente i file. Non credo che questo functionrà nel tuo caso.

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

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

    In bocca al lupo!

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.