Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Produkt/tjänst | Artikel |
|---|---|
| WCF | |
| Webb-API | |
| Webbapplikation |
WCF – Inkludera inte serviceDebug-noden i konfigurationsfilen
| Titel | Detaljer |
|---|---|
| Komponent | WCF |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | Generisk, NET Framework 3 |
| Attribut | N/A |
| Referenser | MSDN, Fortify Kingdom |
| Instruktioner | Windows Communication Framework-tjänster (WCF) kan konfigureras för att exponera felsökningsinformation. Felsökningsinformation bör inte användas i produktionsmiljöer. Taggen <serviceDebug> definierar om funktionen för felsökningsinformation är aktiverad för en WCF-tjänst. Om attributet includeExceptionDetailInFaults är inställt på true, returneras undantagsinformation från programmet till klienter. Angripare kan utnyttja den ytterligare information de får från felsökning av utdata för att montera attacker riktade mot ramverket, databasen eller andra resurser som används av programmet. |
Exempel
Följande konfigurationsfil innehåller taggen <serviceDebug> :
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Inaktivera felsökningsinformation i tjänsten. Detta kan du göra genom att ta bort taggen <serviceDebug> från programmets konfigurationsfil.
WCF – Inkludera inte serviceMetadata-noden i konfigurationsfilen
| Titel | Detaljer |
|---|---|
| Komponent | WCF |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | Allmän |
| Attribut | Generisk, NET Framework 3 |
| Referenser | MSDN, Fortify Kingdom |
| Instruktioner | Att offentligt exponera information om en tjänst kan ge angripare värdefull insikt i hur de kan utnyttja tjänsten. Taggen <serviceMetadata> aktiverar funktionen för metadatapublicering. Tjänstmetadata kan innehålla känslig information som inte bör vara offentligt tillgänglig. Tillåt endast betrodda användare att komma åt metadata och se till att onödig information inte exponeras. Ännu bättre är att helt inaktivera möjligheten att publicera metadata. En säker WCF-konfiguration innehåller inte taggen <serviceMetadata> . |
Se till att rätt undantagshantering utförs i ASP.NET Web API
| Titel | Detaljer |
|---|---|
| Komponent | Webb-API |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | MVC 5, MVC 6 |
| Attribut | N/A |
| Referenser | Exception-hantering i ASP.NET Web API, Model-validering i ASP.NET Web API |
| Instruktioner | Som standardinställning översätts de flesta ohanterade undantag i ASP.NET Web API till ett HTTP-svar med statuskod 500, Internal Server Error |
Exempel
För att styra den statuskod som returneras av API:et HttpResponseException, kan du använda det som visas nedan:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Exempel
För ytterligare kontroll över undantagssvaret HttpResponseMessage kan klassen användas enligt nedan:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)),
ReasonPhrase = "Product ID Not Found"
}
throw new HttpResponseException(resp);
}
return item;
}
Om du vill fånga ohanterade undantag som inte är av typen HttpResponseExceptionkan du använda undantagsfilter. Undantagsfilter implementerar System.Web.Http.Filters.IExceptionFilter gränssnittet. Det enklaste sättet att skriva ett undantagsfilter är att härleda från System.Web.Http.Filters.ExceptionFilterAttribute klassen och åsidosätta metoden OnException.
Exempel
Här är ett filter som konverterar NotImplementedException undantag till HTTP-statuskod 501, Not Implemented:
namespace ProductStore.Filters
{
using System;
using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;
public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
}
Det finns flera sätt att registrera ett undantagsfilter för webb-API:
- Efter åtgärd
- Efter styrenhet
- Globalt
Exempel
Om du vill tillämpa filtret på en specifik åtgärd lägger du till filtret som ett attribut i åtgärden:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Exempel
Om du vill tillämpa filtret på alla åtgärder på en controllerlägger du till filtret som ett attribut i controller klassen:
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Exempel
Om du vill tillämpa filtret globalt på alla webb-API-kontrollanter lägger du till en instans av filtret i GlobalConfiguration.Configuration.Filters samlingen. Undantagsfilter i den här samlingen gäller för alla åtgärder för webb-API-kontrollanter.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Exempel
För modellverifiering kan modelltillståndet skickas till metoden CreateErrorResponse enligt nedan:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
Mer information om exceptionell hantering och modellvalidering finns i länkarna i referensavsnittet i ASP.NET Web API
Exponera inte säkerhetsinformation i felmeddelanden
| Titel | Detaljer |
|---|---|
| Komponent | Webbapplikation |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | Allmän |
| Attribut | N/A |
| Referenser | N/A |
| Instruktioner | Allmänna felmeddelanden tillhandahålls direkt till användaren utan att inkludera känsliga programdata. Exempel på känsliga data är:
Genom att fånga alla fel i ett program och tillhandahålla allmänna felmeddelanden, samt aktivera anpassade fel i IIS, kan du förhindra att information avslöjas. SQL Server databas och .NET Undantagshantering, bland andra felhanteringsarkitekturer, är särskilt utförliga och mycket användbara för en skadlig användare som profilerar ditt program. Visa inte innehållet i en klass som härleds direkt från klassen .NET Exception och se till att du har rätt undantagshantering så att ett oväntat undantag inte oavsiktligt genereras direkt till användaren.
|
Implementera sidan För standardfelhantering
| Titel | Detaljer |
|---|---|
| Komponent | Webbapplikation |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | Allmän |
| Attribut | N/A |
| Referenser | Redigera ASP.NET felsidors inställningar dialogruta |
| Instruktioner | När ett ASP.NET program misslyckas och orsakar ett internt HTTP/1.x 500-serverfel, eller om en funktionskonfiguration (till exempel filtrering av begäranden) förhindrar att en sida visas, genereras ett felmeddelande. Administratörer kan välja om programmet ska visa ett vänligt meddelande till klienten, ett detaljerat felmeddelande till klienten eller ett detaljerat felmeddelande till localhost. Taggen
|
Ange distributionsmetod till Retail i IIS
| Titel | Detaljer |
|---|---|
| Komponent | Webbapplikation |
| SDL-fasen | Distribution |
| Tillämpliga tekniker | Allmän |
| Attribut | N/A |
| Referenser | deployment-element (schema för ASP.NET inställningar) |
| Instruktioner | Växeln Under aktiv utveckling aktiveras ofta växlar och alternativ som är utvecklarfokuserade, såsom spårning av misslyckade begäranden och felsökning. Vi rekommenderar att distributionsmetoden på alla produktionsservrar anges till retail. öppna filen machine.config och se till att |
Undantag bör hanteras säkert
| Titel | Detaljer |
|---|---|
| Komponent | Webbapplikation |
| SDL-fasen | Skapa |
| Tillämpliga tekniker | Allmän |
| Attribut | N/A |
| Referenser | Misslyckas säkert |
| Instruktioner | Applikationen ska misslyckas på ett säkert sätt. Alla metoder som returnerar ett booleskt värde, baserat på vilket vissa beslut fattas, bör ha undantagsblocket noggrant skapat. Det finns många logiska fel som beror på vilka säkerhetsproblem som kryper in när undantagsblocket skrivs slarvigt. |
Exempel
public static bool ValidateDomain(string pathToValidate, Uri currentUrl)
{
try
{
if (!string.IsNullOrWhiteSpace(pathToValidate))
{
var domain = RetrieveDomain(currentUrl);
var replyPath = new Uri(pathToValidate);
var replyDomain = RetrieveDomain(replyPath);
if (string.Compare(domain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
//// Adding additional check to enable CMS urls if they are not hosted on same domain.
if (!string.IsNullOrWhiteSpace(Utilities.CmsBase))
{
var cmsDomain = RetrieveDomain(new Uri(Utilities.Base.Trim()));
if (string.Compare(cmDomain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
return false;
}
else
{
return true;
}
}
return false;
}
}
return true;
}
catch (UriFormatException ex)
{
LogHelper.LogException("Utilities:ValidateDomain", ex);
return true;
}
}
Metoden ovan returnerar alltid True om något undantag inträffar. Om slutanvändaren tillhandahåller en felaktigt utformad URL, som webbläsaren respekterar, men Uri() konstruktorn inte gör det, utlöser detta ett undantag och offret kommer att tas till den giltiga men felaktiga URL:en.