Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
di IIS Team
Introduzione
UrlScan, uno strumento di sicurezza, è stato fornito come componente aggiuntivo alle versioni precedenti di Internet Information Services (IIS) in modo che gli amministratori possano applicare criteri di sicurezza più rigorosi nei server Web. In IIS 7 e versioni successive, tutte le funzionalità principali di URLScan sono state incorporate in un modulo denominato Filtro richieste ed è stata aggiunta una funzionalità Segmenti nascosti. Questo articolo descrive ogni funzionalità di Filtro richieste e fornisce esempi di come le funzionalità possono essere applicate nell'ambiente in uso.
Si noti che IIS include anche un modulo per la riscrittura url. Esistono differenze tra questi due moduli: il filtro delle richieste è progettato e ottimizzato per gli scenari di sicurezza, mentre la riscrittura degli URL può essere applicata per un ampio set di scenari (gli scenari di sicurezza sono solo un subset di questi). Per ulteriori informazioni sulle differenze, vedere Filtro delle richieste di IIS 7.0 e versioni successive e riscrittura degli URL.
Filtrare le richieste a doppia codifica
Questa funzionalità impedisce attacchi che si basano su richieste con doppia codifica e si applica se un utente malintenzionato invia una richiesta con doppia codifica accurata a IIS. Quando il filtro delle richieste con doppia codifica è abilitato, IIS normalizza l'URL due volte; se la prima normalizzazione è diversa dalla seconda, la richiesta viene rifiutata e il codice di errore registrato è 404.11. Il filtro delle richieste con doppia codifica è l'opzione VerifyNormalization in UrlScan.
Se non si vuole che IIS consenta la gestione di richieste con codifica doppia, usare quanto segue:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowDoubleEscaping="false">
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtra caratteri ad alto valore di bit
Questa funzionalità consente o rifiuta tutte le richieste a IIS che contengono caratteri non ASCII e registra il codice di errore 404.12. L'equivalente urlScan è AllowHighBitCharacters.
Si supponga, ad esempio, di voler consentire caratteri di bit elevati per un'applicazione, ma non per l'intero server. Impostare allowHighBitCharacters="false" nel file ApplicationHost.config; ma all'interno della radice dell'applicazione, creare un file Web.config che consente a tale singola applicazione di accettare caratteri non ASCII. Nel file Web.config usare:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowHighBitCharacters="true"
>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtrare in base alle estensioni di file
Questa funzionalità definisce un set di estensioni di file consentite che IIS serve. Quando IIS rifiuta una richiesta in base alle estensioni di file, il codice di errore registrato è 404.7. Le opzioni AllowExtensions e DenyExtensions sono gli equivalenti urlScan.
Si supponga, ad esempio, di voler consentire ogni tipo di file ad eccezione dei file ASP. Impostare l'opzione allowUnlisted per fileExtensions su "true" e quindi definire una voce di estensione di file per negare in modo esplicito ASP:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" >
<add fileExtension=".asp" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtrare in base ai limiti delle richieste
Questo filtro combina tre funzionalità (con gli stessi nomi in UrlScan):
- maxAllowedContentLength - limite superiore sulla dimensione del contenuto (MaxAllowedContentLength - limite superiore sulla dimensione del contenuto)
- maxUrl–limite superiore della lunghezza di un URL
- maxQueryString - limite massimo sulla lunghezza di una stringa di interrogazione
Quando IIS rifiuta una richiesta in base ai limiti delle richieste, il codice di errore registrato è:
- 413.1 se il contenuto è troppo lungo.
- 404.14 se l'URL è troppo grande.
- 404.15 se la stringa di query è troppo lunga.
Ad esempio, è molto comune per le aziende acquistare software a cui non hanno accesso al codice sorgente. Nel corso del tempo, possono trovare vulnerabilità nel codice. Ottenere aggiornamenti per il codice interessato spesso non è facile. I problemi sono spesso causati da un URL o da una stringa di query troppo lunga o da un eccesso di contenuto inviato a un'applicazione. Dopo aver determinato un limite superiore sicuro, è possibile applicare limiti usando la configurazione seguente, senza dover applicare patch ai file binari dell'applicazione:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtrare in base ai verbi
Questa funzionalità definisce un elenco di verbi accettati da IIS come parte di una richiesta. Quando IIS rifiuta una richiesta in base a questa funzionalità, il codice di errore registrato è 404.6. Corrisponde alle opzioni UseAllowVerbs, AllowVerbs e DenyVerbs in UrlScan.
Si supponga, ad esempio, di voler consentire solo il verbo GET. Per impostare questa impostazione, è necessario prima bloccare la configurazione in modo che nessun verbo sia consentito impostando l'opzione allowUnlisted="false". Elencare quindi i verbi che si desidera consentire in modo esplicito, in questo caso GET.
<configuration>
<system.webServer>
<security>
<requestFiltering>
<verbs
allowUnlisted="false"
>
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtrare in base alle sequenze URL
Questa funzionalità definisce un elenco di sequenze rifiutate da IIS quando fa parte di una richiesta. Quando IIS rifiuta una richiesta per questa funzionalità, il codice di errore registrato è 404.5.Corrisponde alla funzionalità DenyUrlSequences in UrlScan.
Questa è una funzionalità molto potente. Usando il codice seguente, è possibile impedire che una determinata sequenza di caratteri venga gestita da IIS:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=".."/>
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Nell'esempio precedente, '..' sequenza viene rifiutata. Si supponga di aver acquistato un'applicazione da un fornitore che è uscito dall'azienda e si è scoperto che l'applicazione era vulnerabile quando è stata inviata una determinata sequenza di caratteri. Usando questa funzionalità, è possibile proteggere l'applicazione semplicemente aggiungendo tale sequenza di URL all'elenco negato senza dover applicare patch al codice dell'applicazione.
Filtrare i segmenti nascosti
Questa funzionalità consente di definire quali segmenti sono "serveble". Quando IIS rifiuta una richiesta in base a questa funzionalità, il codice di errore registrato è 404.8. Questa funzionalità è una novità di IIS 7 e versioni successive; non faceva parte di UrlScan.
Si consideri l'esempio seguente in cui sono presenti due URL in un server:
http://site.com/bin
http://site.com/binary
Si supponga di voler consentire il contenuto nella directory binary, ma non il contenuto nella directory bin. Se si usano sequenze URL e si rifiuta la sequenza "bin", si nega l'accesso a entrambi gli URL. Usando la configurazione illustrata di seguito, è possibile negare l'accesso al contenitore, ma il contenuto è ancora disponibile nel file binario:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="BIN"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Codici di errore IIS 7 e versioni successive
Nelle versioni precedenti è possibile usare UrlScan a livello globale per definire i criteri di sicurezza da applicare ai sistemi. Con IIS 7 e versioni successive, è comunque possibile implementare tali criteri a livello globale, ma anche per URL. È quindi possibile sfruttare tutti i vantaggi offerti dal nuovo modello di delega avanzata.
La tabella seguente è un riepilogo dei codici di errore dei log IIS:
| Error | Codici di stato |
|---|---|
| Sito non trovato | 404.1 |
| Negato dai criteri | 404.2 |
| Negata dalla mappa MIME | 404.3 |
| Nessun gestore | 404.4 |
| Filtro richieste: sequenza URL negata | 404.5 |
| Filtro richieste: verbo negato | 404.6 |
| Filtro richieste: estensione di file non consentita | 404.7 |
| Filtro delle richieste: bloccato dal segmento nascosto | 404.8 |
| Negato perché è stato impostato l'attributo di file nascosto | 404.9 |
| Filtro richieste: negato a causa del doppio escape dell'URL | 404.11 |
| Filtro delle richieste: negato a causa di caratteri con valori di bit elevati | 404.12 |
| Filtro richieste: negato perché l'URL è troppo lungo | 404.14 |
| Filtro richieste: negato perché la stringa di query è troppo lunga | 404.15 |
| Filtro richieste: negato perché la lunghezza del contenuto è troppo grande | 413.1 |
| Filtro richieste: negato perché l'intestazione della richiesta è troppo lunga | 431 |