Come smettere di rivelare le directory web in ASP.Net MVC

3

Abbiamo creato un'applicazione web utilizzando ASP.Net MVC3 e SQL Server 2008 che ha funzionalità come il pagamento con carta di credito, ecc. Abbiamo incaricato una terza parte di eseguire valutazioni di vulnerabilità e test di penetrazione.

Abbiamo ottenuto una buona segnalazione con pochi problemi di sicurezza. Abbiamo risolto tutti i problemi tranne uno.

In questo rapporto si dice che la nostra applicazione rivela directory web come "Admin / Contatti / Dettagli" / Aree / Amministrazione / Stili / ". Non è un grosso problema. Ma il nostro management vuole risolvere anche questo ...

Qualche idea per risolverlo correttamente e rapidamente. Apprezzo se qualcuno può far luce su questo.

    
posta Gayan Perera 01.12.2014 - 12:15
fonte

2 risposte

4

È uno scenario tipico con .NET MVC: gli URL ottimizzati per i motori di ricerca sono il risultato diretto di una corretta implementazione. Ma abbiamo qualcosa di chiaro - queste non sono directory web, ma percorsi MVC, giusto?

I tester di penna paranoici sono spesso a disagio quando l'interfaccia di amministrazione è in qualche modo esposta nell'URL, poiché può attirare attenzioni indesiderate, o essere raccolta e utilizzata per la fuzzing.

Se vuoi migliorare, potresti dover abusare del motore di routing ASP.NET per nascondere il percorso, se la preoccupazione è che l'interfaccia di amministrazione è "esposta" - sarebbe una soluzione rapida, ma l'offuscamento è mai il modo corretto di sistemare le cose.

Un'alternativa è utilizzare un gestore risorse e il routing si basa su token risorsa, ma ciò comporterebbe pesanti modifiche all'applicazione. Ogni risorsa ha il proprio ID token risorsa e può essere generata dinamicamente quando un utente esegue l'accesso. Quindi ogni risorsa (pagina, stile, immagine) è un collegamento al gestore risorse. Quindi ottenere un foglio di stile sarà simile:

<link rel="stylesheet" type="text/css" href="/Resource/80af9420ab0401-00291844a/91009abff01">

Lo stesso vale per gli URL. Ciò potrebbe comportare un sovraccarico e prestazioni scadenti, scarsa scalabilità, ecc. Non lo consiglio , ma in questi giorni la gestione ascolta solo i "consulenti" esterni a cui stanno pagando e rifiuta riconoscere i talenti interni.

Sfortunatamente, a volte è una questione di compromesso: la sicurezza non dovrebbe essere il risultato di scarsa scalabilità o prestazioni ...

    
risposta data 01.12.2014 - 13:44
fonte
1

Se queste sono directory, puoi nasconderle. Un buon articolo è qui: Risoluzione della tirannia delle risposte HTTP 403 alla navigazione nella directory in ASP.NET :

You may not know this, but an HTTP 403 response when browsing to an empty directory is a serious security risk.

What the?! You mean if I go to my website which has a “scripts” folder where I put all my JavaScript and I have directory browsing disabled (as I rightly should) and the server returns a 403 “Forbidden” (which it rightly should), I’m putting my internet things at risks of being pwned?!

Il riepilogo di come eseguire questa operazione è stato aggiungere questo% a web.config :

<system.web>
  <customErrors>
    <error statusCode="404" redirect="/Error/PageNotFound?foo=bar" />
  </customErrors>
</system.web>
<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Change location header" patternSyntax="ExactMatch">
        <match serverVariable="RESPONSE_location" pattern="/Error/PageNotFound?foo=bar" />
        <action type="Rewrite" value="/Error/PageNotFound" />
      </rule>
    </outboundRules>
  </rewrite>
  <httpErrors errorMode="Custom">
    <error statusCode="403" subStatusCode="14" path="/Error/PageNotFound" responseMode="Redirect" />
  </httpErrors>
  <defaultDocument enabled="false" />
</system.webServer>

Se il rapporto fa riferimento a percorsi MVC anziché a directory, puoi comunque rispondere con un messaggio standard Page Not Found in modo che l'utente non venga informato della presenza della pagina di amministrazione. Si prega di notare che questa non è una vera sicurezza e non dovrebbe essere usata al posto di proteggere adeguatamente le pagine di amministrazione (mi rendo conto che sembra che tu sia a conoscenza, ma se qualcun altro trova la tua domanda pensavo che lo avrei chiarito). Gli utenti amministratori dovrebbero quindi accedere utilizzando la pagina di accesso e non essere in grado di accedere direttamente alle pagine di amministrazione e richiedere le loro credenziali.

    
risposta data 02.12.2014 - 12:16
fonte

Leggi altre domande sui tag