
Découvrez les surfaces d'entrée et les problèmes de sécurité dans des assemblys .NET compilés — sans les exécuter.
Analyse les assemblys .NET compilés pour découvrir les surfaces d'entrée (points de terminaison HTTP, hubs SignalR, services WCF, services gRPC, pages Razor, composants Blazor, fonctions Azure, points de terminaison OData), vérifier la configuration d'autorisation et signaler des problèmes de sécurité — le tout sans exécuter l'application.
Disponible en tant qu'outil CLI et module PowerShell.

dotnet tool install -g DllSpy
Install-Module -Name DllSpy
# Lister toutes les surfaces
dllspy ./MyApi.dll
# Analyser les vulnérabilités de sécurité
dllspy ./MyApi.dll -s
# Filtrer par type de surface (HttpEndpoint, SignalRMethod, WcfOperation, GrpcOperation, RazorPage, BlazorComponent, AzureFunction, ODataEndpoint)
dllspy ./MyApi.dll -t HttpEndpoint
# Filtrer par méthode HTTP et nom de classe
dllspy ./MyApi.dll -m DELETE -c User*
# Uniquement les surfaces authentifiées / anonymes
dllspy ./MyApi.dll --auth
dllspy ./MyApi.dll --anon
# Analyser uniquement les assemblys hôtes (exécutables), ignorer les bibliothèques de classes
dllspy ./MyApi.dll --host-only
# Analyser avec une sévérité minimale
dllspy ./MyApi.dll -s --min-severity High
# Format de sortie : table (par défaut), tsv, json
dllspy ./MyApi.dll -o json
dllspy ./MyApi.dll -o tsv
# Lister toutes les routes non protégées
dllspy ./MyApi.dll -o json | jq '[.[] | select(.requiresAuthorization == false) | .displayRoute]'
# Compter les surfaces par type
dllspy ./MyApi.dll -o json | jq 'group_by(.surfaceType) | map({type: .[0].surfaceType, count: length})'
# Problèmes de sécurité sous forme de tableau compact
dllspy ./MyApi.dll -s -o json | jq -r '.[] | [.severity, .surfaceRoute, .title] | @tsv'
# Toutes les surfaces
Search-DllSpy -Path .\MyApi.dll
# Filtrer par type de surface
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
# Filtrer par méthode HTTP
Search-DllSpy -Path .\MyApi.dll -HttpMethod DELETE
# Filtrer par nom de classe (prend en charge les jokers)
Search-DllSpy -Path .\MyApi.dll -Class User*
# Uniquement les surfaces authentifiées / anonymes
Search-DllSpy -Path .\MyApi.dll -RequiresAuth
Search-DllSpy -Path .\MyApi.dll -AllowAnonymous
# Analyser uniquement les assemblys hôtes (exécutables), ignorer les bibliothèques de classes
Search-DllSpy -Path .\bin\*.dll -HostOnly
# Trouver les problèmes de sécurité
Test-DllSpy -Path .\MyApi.dll
# Uniquement les problèmes de haute sévérité
Test-DllSpy -Path .\MyApi.dll -MinimumSeverity High
# Analyser uniquement les assemblys hôtes pour les problèmes de sécurité
Test-DllSpy -Path .\bin\*.dll -HostOnly
# Vue détaillée
Test-DllSpy -Path .\MyApi.dll | Format-List
| Framework | Méthode de détection | Type de surface |
|---|---|---|
| ASP.NET Core / Web API | Classe de base Controller, [ApiController], convention de nommage | HttpEndpoint |
| SignalR | Héritage de Hub / Hub<T> | SignalRMethod |
| WCF | Interfaces [ServiceContract] + méthodes [OperationContract] | WcfOperation |
| gRPC | Classe de base générée avec BindService | GrpcOperation |
| Razor Pages | Héritage de PageModel, méthodes On{Verb}[Handler][Async] | RazorPage |
| Blazor | Héritage de ComponentBase + attribut [Route] | BlazorComponent |
| Azure Functions | [FunctionName] / [Function] + paramètre [HttpTrigger] | AzureFunction |
| OData | Héritage de ODataController | ODataEndpoint |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Point de terminaison non authentifié modifiant l'état | DELETE, POST, PUT ou PATCH sans [Authorize] |
| Moyenne | Déclaration d'autorisation manquante | Le point de terminaison n'a ni [Authorize] ni [AllowAnonymous] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Méthode de hub non authentifiée | Méthode de hub sans [Authorize] (directement invocable par les clients) |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Opération WCF non authentifiée | Opération sans [PrincipalPermission] ou [Authorize] |
| Basse | Authorize sans rôle | [PrincipalPermission] présent mais aucun Role spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Opération gRPC non authentifiée | Méthode de service sans [Authorize] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Gestionnaire non authentifié modifiant l'état | Gestionnaire POST, PUT, DELETE ou PATCH sans [Authorize] |
| Moyenne | Déclaration d'autorisation manquante | Le gestionnaire n'a ni [Authorize] ni [AllowAnonymous] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Composant routable non authentifié | Composant avec [Route] mais sans [Authorize] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Fonction Azure non authentifiée | AuthorizationLevel.Anonymous et aucun attribut [Authorize] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
| Sévérité | Règle | Description |
|---|---|---|
| Élevée | Point de terminaison non authentifié modifiant l'état | DELETE, POST, PUT ou PATCH sans [Authorize] |
| Moyenne | Déclaration d'autorisation manquante | Le point de terminaison n'a ni [Authorize] ni [AllowAnonymous] |
| Basse | Authorize sans rôle/politique | [Authorize] présent mais aucun Roles ou Policy spécifié |
Voir LICENSE.