
اكتشف أسطح الإدخال والمشكلات الأمنية في تجميعات .NET المترجمة — دون تشغيلها.
يقوم بمسح التجميعات (assemblies) المُترجَمة من .NET لاكتشاف أسطح الإدخال (نقاط نهاية HTTP، مراكز SignalR، خدمات WCF، خدمات gRPC، صفحات Razor، مكونات Blazor، دوال Azure، نقاط نهاية OData)، والتحقق من إعدادات التفويض، والإبلاغ عن المشكلات الأمنية — كل ذلك دون تشغيل التطبيق.
متوفر كأداة CLI ووحدة PowerShell.

dotnet tool install -g DllSpy
Install-Module -Name DllSpy
# عرض جميع الأسطح
dllspy ./MyApi.dll
# فحص الثغرات الأمنية
dllspy ./MyApi.dll -s
# تصفية حسب نوع السطح (HttpEndpoint, SignalRMethod, WcfOperation, GrpcOperation, RazorPage, BlazorComponent, AzureFunction, ODataEndpoint)
dllspy ./MyApi.dll -t HttpEndpoint
# تصفية حسب طريقة HTTP واسم الفئة
dllspy ./MyApi.dll -m DELETE -c User*
# الأسطح الموثَّقة فقط / المجهولة فقط
dllspy ./MyApi.dll --auth
dllspy ./MyApi.dll --anon
# مسح التجميعات المضيفة فقط (القابلة للتشغيل)، تخطي مكتبات الفئات
dllspy ./MyApi.dll --host-only
# الفحص بأقل خطورة
dllspy ./MyApi.dll -s --min-severity High
# تنسيق الإخراج: table (افتراضي)، tsv، json
dllspy ./MyApi.dll -o json
dllspy ./MyApi.dll -o tsv
# عرض جميع المسارات غير المحمية
dllspy ./MyApi.dll -o json | jq '[.[] | select(.requiresAuthorization == false) | .displayRoute]'
# عد الأسطح حسب النوع
dllspy ./MyApi.dll -o json | jq 'group_by(.surfaceType) | map({type: .[0].surfaceType, count: length})'
# المشكلات الأمنية كجدول مضغوط
dllspy ./MyApi.dll -s -o json | jq -r '.[] | [.severity, .surfaceRoute, .title] | @tsv'
# جميع الأسطح
Search-DllSpy -Path .\MyApi.dll
# تصفية حسب نوع السطح
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
# تصفية حسب طريقة HTTP
Search-DllSpy -Path .\MyApi.dll -HttpMethod DELETE
# تصفية حسب اسم الفئة (يدعم أحرف البدل)
Search-DllSpy -Path .\MyApi.dll -Class User*
# الأسطح الموثَّقة فقط / المجهولة فقط
Search-DllSpy -Path .\MyApi.dll -RequiresAuth
Search-DllSpy -Path .\MyApi.dll -AllowAnonymous
# مسح التجميعات المضيفة فقط (القابلة للتشغيل)، تخطي مكتبات الفئات
Search-DllSpy -Path .\bin\*.dll -HostOnly
# العثور على المشكلات الأمنية
Test-DllSpy -Path .\MyApi.dll
# فقط المشكلات عالية الخطورة
Test-DllSpy -Path .\MyApi.dll -MinimumSeverity High
# مسح التجميعات المضيفة فقط للمشكلات الأمنية
Test-DllSpy -Path .\bin\*.dll -HostOnly
# عرض مفصل
Test-DllSpy -Path .\MyApi.dll | Format-List
| الإطار | طريقة الكشف | نوع السطح |
|---|---|---|
| ASP.NET Core / Web API | الفئة الأساسية للـ Controller، [ApiController]، اتفاقية التسمية | HttpEndpoint |
| SignalR | وراثة Hub / Hub<T> | SignalRMethod |
| WCF | واجهات [ServiceContract] + دوال [OperationContract] | WcfOperation |
| gRPC | الفئة الأساسية المُنشأة مع BindService | GrpcOperation |
| Razor Pages | وراثة PageModel، دوال On{Verb}[Handler][Async] | RazorPage |
| Blazor | وراثة ComponentBase + خاصية [Route] | BlazorComponent |
| Azure Functions | [FunctionName] / [Function] + معامل [HttpTrigger] | AzureFunction |
| OData | وراثة ODataController | ODataEndpoint |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | نقطة نهاية غير موثَّقة تُغيّر الحالة | DELETE, POST, PUT, أو PATCH بدون [Authorize] |
| Medium | إعلان تفويض مفقود | النقطة النهائية ليس لديها لا [Authorize] ولا [AllowAnonymous] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | دالة مركز غير موثَّقة | دالة مركز بدون [Authorize] (يمكن للعملاء استدعاؤها مباشرة) |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | عملية WCF غير موثَّقة | عملية بدون [PrincipalPermission] أو [Authorize] |
| Low | تفويض بدون دور | [PrincipalPermission] موجود لكن بدون Role محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | عملية gRPC غير موثَّقة | دالة خدمة بدون [Authorize] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | معالج غير موثَّق يُغيّر الحالة | معالج POST, PUT, DELETE, أو PATCH بدون [Authorize] |
| Medium | إعلان تفويض مفقود | المعالج ليس لديه لا [Authorize] ولا [AllowAnonymous] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | مكون غير موثَّق وقابل للتوجيه | مكون مع [Route] لكن بدون [Authorize] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | دالة Azure غير موثَّقة | AuthorizationLevel.Anonymous ولا يوجد خاصية [Authorize] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
| الخطورة | القاعدة | الوصف |
|---|---|---|
| High | نقطة نهاية غير موثَّقة تُغيّر الحالة | DELETE, POST, PUT, أو PATCH بدون [Authorize] |
| Medium | إعلان تفويض مفقود | النقطة النهائية ليس لديها لا [Authorize] ولا [AllowAnonymous] |
| Low | تفويض بدون دور أو سياسة | [Authorize] موجود لكن بدون Roles أو Policy محددة |
انظر LICENSE.