Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Product/Service | Artikel |
|---|---|
| WCF | |
| Web-API | |
| Webapplicatie |
WCF- Neem geen serviceDebug-knooppunt op in het configuratiebestand
| Titel | Details |
|---|---|
| Onderdeel | WCF |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | Algemeen, NET Framework 3 |
| Kenmerken | N/A |
| Verwijzingen | MSDN, Fortify Kingdom |
| Stappen | Windows WCF-services (Communication Framework) kunnen worden geconfigureerd om foutopsporingsgegevens beschikbaar te maken. Foutopsporingsinformatie mag niet worden gebruikt in productieomgevingen. De <serviceDebug> tag bepaalt of de functie voor foutopsporingsinformatie is ingeschakeld voor een WCF-service. Als het kenmerk includeExceptionDetailInFaults is ingesteld op true, wordt uitzonderingsinformatie van de toepassing aan clients geretourneerd. Aanvallers kunnen gebruikmaken van de aanvullende informatie die ze krijgen van foutopsporingsuitvoer om aanvallen te koppelen die zijn gericht op het framework, de database of andere resources die door de toepassing worden gebruikt. |
Voorbeeld
Het volgende configuratiebestand bevat de <serviceDebug> tag:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Schakel foutopsporingsgegevens in de service uit. Dit kan worden bereikt door de tag te verwijderen uit het <serviceDebug> configuratiebestand van uw toepassing.
WCF: serviceMetadata-knooppunt niet opnemen in het configuratiebestand
| Titel | Details |
|---|---|
| Onderdeel | WCF |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | Algemeen |
| Kenmerken | Algemeen, NET Framework 3 |
| Verwijzingen | MSDN, Fortify Kingdom |
| Stappen | Door informatie over een service openbaar te maken, kunnen aanvallers waardevolle inzichten krijgen in hoe ze de service kunnen exploiteren. Met <serviceMetadata> de tag wordt de functie voor het publiceren van metagegevens ingeschakeld. Servicemetagegevens kunnen gevoelige informatie bevatten die niet openbaar toegankelijk mag zijn. U kunt ten minste vertrouwde gebruikers toegang geven tot de metagegevens en ervoor zorgen dat onnodige informatie niet beschikbaar wordt gesteld. Nog beter, schakel de mogelijkheid om metagegevens te publiceren volledig uit. Een veilige WCF-configuratie bevat de <serviceMetadata> tag niet. |
Zorg ervoor dat de juiste afhandeling van uitzonderingen wordt uitgevoerd in ASP.NET Web API
| Titel | Details |
|---|---|
| Onderdeel | Web-API |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | MVC 5, MVC 6 |
| Kenmerken | N/A |
| Verwijzingen | Exception Handling in ASP.NET Web API, Model Validation in ASP.NET Web API |
| Stappen | Standaard worden de meeste onopgeslagen uitzonderingen in ASP.NET Web API omgezet in een HTTP-antwoord met statuscode 500, Internal Server Error |
Voorbeeld
Als u de statuscode wilt beheren die door de API wordt geretourneerd, HttpResponseException kunt u deze gebruiken zoals hieronder wordt weergegeven:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Voorbeeld
Voor verdere controle over het uitzonderingsantwoord kan de HttpResponseMessage klasse worden gebruikt zoals hieronder wordt weergegeven:
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;
}
Uitzonderingsfilters kunnen worden gebruikt om niet-verwerkte uitzonderingen te ondervangen die niet van het type HttpResponseExceptionzijn. Uitzonderingsfilters implementeren de System.Web.Http.Filters.IExceptionFilter interface. De eenvoudigste manier om een uitzonderingsfilter te schrijven, is om af te leiden van de System.Web.Http.Filters.ExceptionFilterAttribute klasse en de OnException-methode te overschrijven.
Voorbeeld
Hier volgt een filter waarmee uitzonderingen worden geconverteerd NotImplementedException naar HTTP-statuscode 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);
}
}
}
}
Er zijn verschillende manieren om een web-API-uitzonderingsfilter te registreren:
- Per actie
- Per controller
- Wereldwijd
Voorbeeld
Als u het filter wilt toepassen op een specifieke actie, voegt u het filter toe als een kenmerk aan de actie:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Voorbeeld
Als u het filter wilt toepassen op alle acties op een controller, voegt u het filter toe als een kenmerk aan de controller klasse:
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Voorbeeld
Als u het filter globaal wilt toepassen op alle Web API-controllers, voegt u een exemplaar van het filter toe aan de GlobalConfiguration.Configuration.Filters verzameling. Uitzonderingsfilters in deze verzameling zijn van toepassing op een web-API-controlleractie.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Voorbeeld
Voor modelvalidatie kan de modelstatus worden doorgegeven aan de methode CreateErrorResponse, zoals hieronder wordt weergegeven:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
Raadpleeg de koppelingen in de sectie met verwijzingen voor meer informatie over uitzonderlijke verwerking en modelvalidatie in ASP.NET Web API
Beveiligingsdetails niet weergeven in foutberichten
| Titel | Details |
|---|---|
| Onderdeel | Webapplicatie |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | Algemeen |
| Kenmerken | N/A |
| Verwijzingen | N/A |
| Stappen | Algemene foutberichten worden rechtstreeks aan de gebruiker verstrekt zonder gevoelige toepassingsgegevens op te geven. Voorbeelden van gevoelige gegevens zijn:
Het opvangen van alle fouten binnen een toepassing en het verstrekken van generieke foutberichten, evenals het inschakelen van aangepaste foutmeldingen in IIS, helpt informatie openbaarmaking te voorkomen. SQL Server database, en .NET afhandeling van uitzonderingen, onder andere architecturen voor foutafhandeling, zijn met name uitgebreid en zeer nuttig voor een kwaadwillende gebruiker die uw toepassing profileert. Geef niet rechtstreeks de inhoud van een klasse weer die is afgeleid van de klasse .NET Uitzondering en zorg ervoor dat u de juiste afhandeling van uitzonderingen hebt, zodat een onverwachte uitzondering niet per ongeluk rechtstreeks naar de gebruiker wordt verheven.
|
Standaardpagina voor foutafhandeling implementeren
| Titel | Details |
|---|---|
| Onderdeel | Webapplicatie |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | Algemeen |
| Kenmerken | N/A |
| Verwijzingen | Dialoogvenster Instellingen voor ASP.NET foutpagina's bewerken |
| Stappen | Wanneer een ASP.NET toepassing mislukt en een HTTP/1.x 500 Interne serverfout veroorzaakt, of een functieconfiguratie (zoals Aanvraagfiltering) voorkomt dat een pagina wordt weergegeven, wordt er een foutbericht gegenereerd. Beheerders kunnen kiezen of de toepassing een beschrijvend bericht moet weergeven aan de client, een gedetailleerd foutbericht aan de client of alleen een gedetailleerd foutbericht aan localhost. De
Open het |
Implementatiemethode instellen op detailhandel in IIS
| Titel | Details |
|---|---|
| Onderdeel | Webapplicatie |
| SDL-fase | Implementatie |
| Toepasselijke technologieën | Algemeen |
| Kenmerken | N/A |
| Verwijzingen | deploymentelement (schema voor ASP.NET instellingen) |
| Stappen | De Vaak worden schakelopties en opties die zijn gericht op ontwikkelaars, zoals tracering van mislukte aanvragen en foutopsporing, ingeschakeld tijdens actieve ontwikkeling. Het wordt aanbevolen om de deploymethode op iedere productieserver in te stellen op retail. Open het bestand machine.config en zorg ervoor dat |
Uitzonderingen moeten veilig mislukken
| Titel | Details |
|---|---|
| Onderdeel | Webapplicatie |
| SDL-fase | Bouwen |
| Toepasselijke technologieën | Algemeen |
| Kenmerken | N/A |
| Verwijzingen | Beveiligd falen |
| Stappen | De toepassing moet op een veilige manier falen. Elke methode die een Booleaanse waarde retourneert, op basis waarvan bepaalde beslissingen worden genomen, moet een uitzonderingsblok hebben dat zorgvuldig is gemaakt. Er zijn veel logische fouten waardoor beveiligingsproblemen zich voordoen, wanneer het uitzonderingsblok onzorgvuldig wordt geschreven. |
Voorbeeld
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;
}
}
De bovenstaande methode retourneert altijd True, als er een uitzondering optreedt. Als de eindgebruiker een ongeldige URL biedt, die de browser respecteert, maar de Uri() constructor dit niet doet, wordt er een uitzondering gegenereerd en wordt het slachtoffer naar de geldige maar onjuiste URL gebracht.