Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Produkt/služba | Článek |
|---|---|
| WCF | |
| Webové rozhraní API |
|
| Webová aplikace |
WCF – Nezahrnujte uzel ServiceDebug do konfiguračního souboru
| Titul | Podrobnosti |
|---|---|
| Součást | WCF |
| Fáze SDL | Build |
| Použitelné technologie | Generický, NET Framework 3 |
| Atributy | N/A |
| Odkazy | MSDN, Fortify Kingdom |
| Kroky | služby Windows Communication Framework (WCF) je možné nakonfigurovat tak, aby zpřístupnily informace o ladění. Informace o ladění by se neměly používat v produkčních prostředích. Značka <serviceDebug> definuje, jestli je pro službu WCF povolená funkce informací o ladění. Pokud je atribut includeExceptionDetailInFaults nastaven na hodnotu true, informace o výjimce z aplikace budou vráceny klientům. Útočníci můžou využít další informace, které získají z ladění výstupu, a připojit útoky cílené na architekturu, databázi nebo jiné prostředky používané aplikací. |
Příklad
Následující konfigurační soubor obsahuje <serviceDebug> značku:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Zakažte informace o ladění ve službě. Toho lze dosáhnout odebráním značky <serviceDebug> z konfiguračního souboru vaší aplikace.
WCF – Nezahrnujte uzel ServiceMetadata do konfiguračního souboru
| Titul | Podrobnosti |
|---|---|
| Součást | WCF |
| Fáze SDL | Build |
| Použitelné technologie | Obecná |
| Atributy | Generický, NET Framework 3 |
| Odkazy | MSDN, Fortify Kingdom |
| Kroky | Veřejné zveřejnění informací o službě může útočníkům poskytnout cenný přehled o tom, jak může službu zneužít. Značka <serviceMetadata> povolí funkci publikování metadat. Metadata služby můžou obsahovat citlivé informace, které by neměly být veřejně přístupné. Minimálně povolte důvěryhodným uživatelům přístup k metadatům a zajistěte, aby se nepotřebné informace nebyly odhaleny. Ještě lepší, zcela zakažte možnost publikovat metadata. Bezpečná konfigurace WCF nebude obsahovat <serviceMetadata> značku. |
Ujistěte se, že se v ASP.NET Web API provádí správné zpracování výjimek.
| Titul | Podrobnosti |
|---|---|
| Součást | Webové rozhraní API |
| Fáze SDL | Build |
| Použitelné technologie | MVC 5, MVC 6 |
| Atributy | N/A |
| Odkazy | Zpracování výjimek v ASP.NET Web APIModel Validation in ASP.NET Web API |
| Kroky | Ve výchozím nastavení se většina nezachycených výjimek v ASP.NET Web API přeloží do odpovědi HTTP se stavovým kódem 500, Internal Server Error |
Příklad
Pokud chcete řídit stavový kód vrácený rozhraním API, HttpResponseException můžete ho použít, jak je znázorněno níže:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Příklad
Pro další kontrolu nad odpovědí HttpResponseMessage na výjimku lze třídu použít, jak je znázorněno níže:
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;
}
Chcete-li zachytit neošetřené výjimky, které nejsou typu HttpResponseException, lze použít filtry výjimek. Filtry výjimek implementují System.Web.Http.Filters.IExceptionFilter rozhraní. Nejjednodušší způsob, jak napsat filtr výjimky, je odvodit z třídy System.Web.Http.Filters.ExceptionFilterAttribute a přepsat metodu OnException.
Příklad
Tady je filtr, který převádí NotImplementedException výjimky na stavový kód 501, Not ImplementedHTTP:
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);
}
}
}
}
Existuje několik způsobů, jak zaregistrovat filtr výjimek webového rozhraní API:
- Podle činnosti
- Podle kontroleru
- Globálně
Příklad
Pokud chcete filtr použít na konkrétní akci, přidejte filtr jako atribut akce:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Příklad
Chcete-li použít filtr na všechny akce na objektu controller, přidejte filtr jako atribut třídy controller :
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Příklad
Pokud chcete filtr použít globálně na všechny kontrolery webového rozhraní API, přidejte do GlobalConfiguration.Configuration.Filters kolekce instanci filtru. Filtry výjimek v této kolekci se vztahují na všechny akce kontroleru webového rozhraní API.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Příklad
Pro ověření modelu lze stav modelu předat metodě CreateErrorResponse, jak je znázorněno níže:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
Další podrobnosti o výjimečném zpracování a ověřování modelů v ASP.NET Web API najdete v odkazech v části reference.
Nezpřístupňujte podrobnosti o zabezpečení v chybových zprávách
| Titul | Podrobnosti |
|---|---|
| Součást | Webová aplikace |
| Fáze SDL | Build |
| Použitelné technologie | Obecná |
| Atributy | N/A |
| Odkazy | N/A |
| Kroky | Obecné chybové zprávy jsou poskytovány přímo uživateli bez zahrnutí citlivých dat aplikace. Mezi příklady citlivých dat patří:
Zachycení všech chyb v aplikaci a poskytnutí obecných chybových zpráv, stejně jako povolení vlastních chybových nastavení v IIS, pomůže zabránit zpřístupnění informací. Databáze SQL Serveru a zpracování výjimek v .NET, mezi dalšími architekturami zpracování chyb, jsou obzvláště podrobné a velmi užitečné pro škodlivého uživatele profilujícího vaši aplikaci. Nezobrazovat přímo obsah třídy odvozené z třídy .NET Exception a ujistěte se, že máte správné zpracování výjimek, aby neočekávaná výjimka nebyla neúmyslně vyvolána přímo uživateli.
|
Implementace výchozí stránky zpracování chyb
| Titul | Podrobnosti |
|---|---|
| Součást | Webová aplikace |
| Fáze SDL | Build |
| Použitelné technologie | Obecná |
| Atributy | N/A |
| Odkazy | Upravit dialogové okno Nastavení chybových stránek ASP.NET |
| Kroky | Když aplikace ASP.NET selže a způsobí chybu interního serveru HTTP/1.x 500 nebo konfiguraci funkce (například filtrování požadavků), zabrání zobrazení stránky, vygeneruje se chybová zpráva. Správci můžou zvolit, jestli by aplikace měla klientovi zobrazit popisnou zprávu, podrobnou chybovou zprávu pro klienta nebo podrobnou chybovou zprávu pouze pro místního hostitele. Značka
|
Nastavte metodu nasazení na Retail ve službě IIS
| Titul | Podrobnosti |
|---|---|
| Součást | Webová aplikace |
| Fáze SDL | Nasazení |
| Použitelné technologie | Obecná |
| Atributy | N/A |
| Odkazy | element deployment (schéma nastavení ASP.NET) |
| Kroky | Přepínač Během aktivního vývoje jsou často aktivovány přepínače a možnosti zaměřené na vývojáře, jako například trasování neúspěšných požadavků a ladění. Doporučuje se nastavit metodu nasazení na libovolném produkčním serveru na maloobchodní verzi. otevřete soubor machine.config a ujistěte se, že |
Výjimky by měly selhat bezpečně
| Titul | Podrobnosti |
|---|---|
| Součást | Webová aplikace |
| Fáze SDL | Build |
| Použitelné technologie | Obecná |
| Atributy | N/A |
| Odkazy | Bezpečně selhat |
| Kroky | Aplikace by měla bezpečně selhat. Každá metoda, která vrací logickou hodnotu, na základě které se provádí určité rozhodnutí, by měla mít pečlivě vytvořený blok výjimky. Mnoho logických chyb způsobuje bezpečnostní problémy, když je blok výjimky psán nedbale. |
Příklad
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;
}
}
Výše uvedená metoda vždy vrátí true, pokud dojde k nějaké výjimce. Pokud koncový uživatel poskytne špatně formátovanou adresu URL, kterou prohlížeč respektuje, ale konstruktor nikoliv, dojde k vyvolání výjimky a oběť bude přesměrována na platnou, avšak nesprávně formátovanou adresu URL.