
Scopri le superfici di input e i problemi di sicurezza negli assembly .NET compilati — senza eseguirli.
Analizza gli assembly .NET compilati per scoprire superfici di input (endpoint HTTP, hub SignalR, servizi WCF, servizi gRPC, pagine Razor, componenti Blazor, Funzioni di Azure, endpoint OData), verificare la configurazione dell'autorizzazione e segnalare problemi di sicurezza — il tutto senza eseguire l'applicazione.
Disponibile come strumento CLI e modulo PowerShell.

dotnet tool install -g DllSpy
Install-Module -Name DllSpy
# Elenca tutte le superfici
dllspy ./MyApi.dll
# Scansiona per vulnerabilità di sicurezza
dllspy ./MyApi.dll -s
# Filtra per tipo di superficie (HttpEndpoint, SignalRMethod, WcfOperation, GrpcOperation, RazorPage, BlazorComponent, AzureFunction, ODataEndpoint)
dllspy ./MyApi.dll -t HttpEndpoint
# Filtra per metodo HTTP e nome classe
dllspy ./MyApi.dll -m DELETE -c User*
# Solo superfici autenticate / anonime
dllspy ./MyApi.dll --auth
dllspy ./MyApi.dll --anon
# Scansiona solo assembly eseguibili (host), salta le librerie di classi
dllspy ./MyApi.dll --host-only
# Scansiona con gravità minima
dllspy ./MyApi.dll -s --min-severity High
# Formato output: table (predefinito), tsv, json
dllspy ./MyApi.dll -o json
dllspy ./MyApi.dll -o tsv
# Elenca tutte le route non protette
dllspy ./MyApi.dll -o json | jq '[.[] | select(.requiresAuthorization == false) | .displayRoute]'
# Conta le superfici per tipo
dllspy ./MyApi.dll -o json | jq 'group_by(.surfaceType) | map({type: .[0].surfaceType, count: length})'
# Problemi di sicurezza come tabella compatta
dllspy ./MyApi.dll -s -o json | jq -r '.[] | [.severity, .surfaceRoute, .title] | @tsv'
# Tutte le superfici
Search-DllSpy -Path .\MyApi.dll
# Filtra per tipo di superficie
Search-DllSpy -Path .\MyApi.dll -Type HttpEndpoint
Search-DllSpy -Path .\MyApi.dll -Type SignalRMethod
Search-DllSpy -Path .\MyApi.dll -Type WcfOperation
Search-DllSpy -Path .\MyApi.dll -Type GrpcOperation
Search-DllSpy -Path .\MyApi.dll -Type RazorPage
Search-DllSpy -Path .\MyApi.dll -Type BlazorComponent
Search-DllSpy -Path .\MyApi.dll -Type AzureFunction
Search-DllSpy -Path .\MyApi.dll -Type ODataEndpoint
# Filtra per metodo HTTP
Search-DllSpy -Path .\MyApi.dll -HttpMethod DELETE
# Filtra per nome classe (supporta wildcard)
Search-DllSpy -Path .\MyApi.dll -Class User*
# Solo superfici autenticate / anonime
Search-DllSpy -Path .\MyApi.dll -RequiresAuth
Search-DllSpy -Path .\MyApi.dll -AllowAnonymous
# Scansiona solo assembly eseguibili (host), salta le librerie di classi
Search-DllSpy -Path .\bin\*.dll -HostOnly
# Trova problemi di sicurezza
Test-DllSpy -Path .\MyApi.dll
# Solo problemi ad alta gravità
Test-DllSpy -Path .\MyApi.dll -MinimumSeverity High
# Scansiona solo assembly host per problemi di sicurezza
Test-DllSpy -Path .\bin\*.dll -HostOnly
# Vista dettagliata
Test-DllSpy -Path .\MyApi.dll | Format-List
| Framework | Metodo di rilevamento | Tipo di superficie |
|---|---|---|
| ASP.NET Core / Web API | Classe base Controller, [ApiController], convenzione di denominazione | HttpEndpoint |
| SignalR | Ereditarietà Hub / Hub<T> | SignalRMethod |
| WCF | Interfacce [ServiceContract] + metodi [OperationContract] | WcfOperation |
| gRPC | Classe base generata con BindService | GrpcOperation |
| Pagine Razor | Ereditarietà PageModel, metodi On{Verb}[Handler][Async] | RazorPage |
| Blazor | Ereditarietà ComponentBase + attributo [Route] | BlazorComponent |
| Funzioni di Azure | [FunctionName] / [Function] + parametro [HttpTrigger] | AzureFunction |
| OData | Ereditarietà ODataController | ODataEndpoint |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Endpoint senza autenticazione che modifica lo stato | DELETE, POST, PUT o PATCH senza [Authorize] |
| Media | Dichiarazione di autorizzazione mancante | Endpoint senza né [Authorize] né [AllowAnonymous] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Metodo hub non autenticato | Metodo hub senza [Authorize] (invocabile direttamente dai client) |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Operazione WCF non autenticata | Operazione senza [PrincipalPermission] o [Authorize] |
| Bassa | Authorize senza ruolo | [PrincipalPermission] presente ma senza Role specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Operazione gRPC non autenticata | Metodo del servizio senza [Authorize] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Gestore non autenticato che modifica lo stato | Gestore POST, PUT, DELETE o PATCH senza [Authorize] |
| Media | Dichiarazione di autorizzazione mancante | Gestore senza né [Authorize] né [AllowAnonymous] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Componente instradabile non autenticato | Componente con [Route] ma senza [Authorize] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Funzione di Azure non autenticata | AuthorizationLevel.Anonymous e nessun attributo [Authorize] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
| Gravità | Regola | Descrizione |
|---|---|---|
| Alta | Endpoint senza autenticazione che modifica lo stato | DELETE, POST, PUT o PATCH senza [Authorize] |
| Media | Dichiarazione di autorizzazione mancante | Endpoint senza né [Authorize] né [AllowAnonymous] |
| Bassa | Authorize senza ruolo/policy | [Authorize] presente ma senza Roles o Policy specificato |
Vedi LICENSE.