Infrastruttura di sicurezza: gestione della configurazione - Procedure di mitigazioneSecurity Frame: Configuration Management | Mitigations

Prodotto o servizioProduct/Service ArticoloArticle
Applicazione WebWeb Application
DatabaseDatabase
API WebWeb API
Dispositivo IoTIoT Device
Gateway IoT sul campoIoT Field Gateway
Gateway IoT cloudIoT Cloud Gateway
Limite di Trust del computerMachine Trust Boundary
Archiviazione di AzureAzure Storage
WCFWCF

Implementare Content Security Policy (CSP) e disabilitare il contenuto JavaScript inlineImplement Content Security Policy (CSP), and disable inline javascript

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences An Introduction to Content Security Policy (Introduzione a Content Security Policy) Content Security Policy Reference (Informazioni di riferimento su Content Security Policy), Security features (Funzionalità di sicurezza), Introduction to content security policy (Introduzione a Content Security Policy), (È possibile usare use CSP?)An Introduction to Content Security Policy, Content Security Policy Reference, Security features, Introduction to content security policy, Can I use CSP?
PassaggiSteps

Content Security Policy (CSP) è un meccanismo di sicurezza avanzato, uno standard W3C, che consente ai proprietari di applicazioni Web di avere il controllo del contenuto incorporato nel sito.Content Security Policy (CSP) is a defense-in-depth security mechanism, a W3C standard, that enables web application owners to have control on the content embedded in their site. CSP viene aggiunto come intestazione della risposta HTTP nel server Web e viene applicato sul lato client dai browser.CSP is added as an HTTP response header on the web server and is enforced on the client side by browsers. Si tratta di criteri basati su un elenco di elementi consentiti: un sito Web può dichiarare un set di domini attendibili da cui possono essere caricati contenuti attivi, ad esempio JavaScript.It is a whitelist-based policy - a website can declare a set of trusted domains from which active content such as JavaScript can be loaded.

CSP offre i seguenti vantaggi per la sicurezza:CSP provides the following security benefits:

  • Protezione da XSS: se una pagina è vulnerabile a XSS, un utente malintenzionato può sfruttarlo in 2 modi:Protection against XSS: If a page is vulnerable to XSS, an attacker can exploit it in 2 ways:
    • Inserimento di <script>malicious code</script>.Inject <script>malicious code</script>. Questo exploit non funzionerà a causa della restrizione di base 1 di CSP.This exploit will not work due to CSP’s Base Restriction-1
    • Inserimento di <script src=”http://attacker.com/maliciousCode.js”/>.Inject <script src=”http://attacker.com/maliciousCode.js”/>. Questo exploit non funzionerà perché il dominio controllato dall'utente malintenzionato non sarà nell'elenco di domini consentiti di CSP.This exploit will not work since the attacker controlled domain will not be in CSP’s whitelist of domains
  • Controllo sull'esfiltrazione dei dati: se un contenuto dannoso in una pagina Web prova a connettersi a un sito Web esterno e a sottrarre dati, la connessione verrà interrotta da CSP.Control over data exfiltration: If any malicious content on a webpage attempts to connect to an external website and steal data, the connection will be aborted by CSP. Infatti il dominio di destinazione non sarà nell'elenco elementi consentiti di CSP.This is because the target domain will not be in CSP’s whitelist
  • Difesa contro il click-jacking: il click-jacking è una tecnica di attacco con la quale un antagonista può inserire in un frame un sito Web originale e forzare gli utenti a fare clic sugli elementi dell'interfaccia utente.Defense against click-jacking: click-jacking is an attack technique using which an adversary can frame a genuine website and force users to click on UI elements. Attualmente la difesa contro il click-jacking si basa sulla configurazione dell'intestazione della risposta X-Frame-Options.Currently defense against click-jacking is achieved by configuring a response header- X-Frame-Options. Non tutti i browser supportano questa intestazione e, con il passare del tempo, CSP diventerà uno dei modi standard per difendersi dal click-jackingNot all browsers respect this header and going forward CSP will be a standard way to defend against click-jacking
  • Creazione di report sugli attacchi in tempo reale: se si verifica un attacco di tipo injection in un sito Web abilitato per CSP, i browser attiveranno automaticamente una notifica per un endpoint configurato sul server Web.Real-time attack reporting: If there is an injection attack on a CSP-enabled website, browsers will automatically trigger a notification to an endpoint configured on the webserver. In questo modo, CSP funge da sistema di avviso in tempo reale.This way, CSP serves as a real-time warning system.

EsempioExample

Criteri di esempio:Example policy:

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

Questi criteri consentono il caricamento degli script solo dal server dell'applicazione Web e dal server Google Analytics.This policy allows scripts to load only from the web application’s server and google analytics server. Gli script caricati da altri siti verranno rifiutati.Scripts loaded from any other site will be rejected. Quando CSP viene abilitato in un sito Web, le funzionalità seguenti vengono automaticamente disabilitate per mitigare gli attacchi XSS.When CSP is enabled on a website, the following features are automatically disabled to mitigate XSS attacks.

EsempioExample

Gli script inline non verranno eseguiti.Inline scripts will not execute. Di seguito sono riportati esempi di script inline.Following are examples of inline scripts

<script> some Javascript code </script>
Event handling attributes of HTML tags (e.g., <button onclick=”function(){}”>
javascript:alert(1);

EsempioExample

Le stringhe non verranno valutate come codice.Strings will not be evaluated as code.

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

Abilitare il filtro XSS del browserEnable browser's XSS filter

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences XSS Protection Filter (Filtro di protezione XSS)XSS Protection Filter
PassaggiSteps

La configurazione dell'intestazione della risposta X-XSS-Protection controlla il filtro di cross-site scripting del browser.X-XSS-Protection response header configuration controls the browser's cross site script filter. Questa intestazione della risposta può avere i valori seguenti:This response header can have following values:

  • 0: Disabilita il filtro.0: This will disable the filter
  • 1: Filter enabled Se viene rilevato un attacco di tipo cross-site scripting, per arrestare l'attacco, il browser purifica la pagina.1: Filter enabled If a cross-site scripting attack is detected, in order to stop the attack, the browser will sanitize the page
  • 1: mode=block : Filter enabled.1: mode=block : Filter enabled. Invece di purificare la pagina, quando viene rilevato un attacco XSS, il browser impedisce il rendering della paginaRather than sanitize the page, when a XSS attack is detected, the browser will prevent rendering of the page
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled.1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Il browser purificherà la pagina e segnalerà la violazione.The browser will sanitize the page and report the violation.

Si tratta di una funzione di Chromium che utilizza i report sulle violazioni CSP per inviare i dettagli all'URI scelto.This is a Chromium function utilizing CSP violation reports to send details to a URI of your choice. Le ultime 2 opzioni sono considerate valori sicuri.The last 2 options are considered safe values.

Le applicazioni ASP.NET devono disabilitare la traccia e il debug prima della distribuzioneASP.NET applications must disable tracing and debugging prior to deployment

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Panoramica del debug di ASP.NET, Panoramica dell'analisi di ASP.NET, Procedura: Abilitare l'analisi per un'applicazione ASP.NET, Procedura: Abilitare il debug per applicazioni ASP.NETASP.NET Debugging Overview, ASP.NET Tracing Overview, How to: Enable Tracing for an ASP.NET Application, How to: Enable Debugging for ASP.NET Applications
PassaggiSteps Quando l'analisi viene abilitata per la pagina, ogni browser che la richiede ottiene anche le informazioni di analisi contenenti i dati sul flusso di lavoro e sullo stato del server interno.When tracing is enabled for the page, every browser requesting it also obtains the trace information that contains data about internal server state and workflow. Tali informazioni possono essere relative alla sicurezza.That information could be security sensitive. Quando il debug viene abilitato per la pagina, gli errori che si verificano sul server restituiscono dati di analisi dello stack completa presentati al browser.When debugging is enabled for the page, errors happening on the server result in a full stack trace data presented to the browser. Tali dati possono esporre informazioni relative alla sicurezza sul flusso di lavoro del server.That data may expose security-sensitive information about the server's workflow.

Accedere a contenuto JavaScript di terze parti solo da origini attendibiliAccess third-party javascripts from trusted sources only

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps solo le origini attendibili devono fare riferimento al contenuto JavaScript di terze parti.third-party JavaScripts should be referenced only from trusted sources. Gli endpoint di riferimento devono sempre essere in SSL.The reference endpoints should always be on SSL.

Assicurarsi che le pagine ASP.NET autenticate incorporino difese contro attacchi di tipo UI redress o click-jackingEnsure that authenticated ASP.NET pages incorporate UI Redressing or click-jacking defenses

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences OWASP click-jacking Defense Cheat Sheet (Foglio informativo di OWASP sulla difesa contro il click-jacking), IE Internals - Combating click-jacking With X-Frame-Options (IEInternals: lotta al click-jacking con X-Frame-Options)OWASP click-jacking Defense Cheat Sheet, IE Internals - Combating click-jacking With X-Frame-Options
PassaggiSteps

Il click-jacking, noto anche come "attacco di tipo UI redress", si verifica quando un utente malintenzionato usa più livelli trasparenti o opachi per ingannare un utente che vuole fare clic nella pagina principale e indurlo invece a fare clic su un pulsante o su un collegamento in un'altra pagina.click-jacking, also known as a "UI redress attack", is when an attacker uses multiple transparent or opaque layers to trick a user into clicking on a button or link on another page when they were intending to click on the top-level page.

Questa sovrapposizione si ottiene creando una pagina dannosa con un iframe, che carica la pagina della vittima.This layering is achieved by crafting a malicious page with an iframe, which loads the victim's page. L'utente malintenzionato assume quindi il controllo dei clic destinati alla pagina e li instrada a un'altra pagina, quasi certamente di proprietà di un'altra applicazione o dominio oppure di entrambi.Thus, the attacker is "hijacking" clicks meant for their page and routing them to another page, most likely owned by another application, domain, or both. Per impedire gli attacchi di tipo click-jacking, impostare le intestazioni della risposta HTTP X-Frame-Options appropriate che indicano al browser di non consentire l'inserimento in frame da altri dominiTo prevent click-jacking attacks, set the proper X-Frame-Options HTTP response headers that instruct the browser to not allow framing from other domains

EsempioExample

L'intestazione X-FRAME-OPTIONS può essere impostata tramite file web.config IIS. Frammento di codice di Web.config che non devono mai essere inseriti in un frame:The X-FRAME-OPTIONS header can be set via IIS web.config. Web.config code snippet for sites that should never be framed:

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

EsempioExample

Codice di Web.config per siti che devono essere inseriti in un frame solo dalle pagine nello stesso dominio:Web.config code for sites that should only be framed by pages in the same domain:

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

Assicurarsi che siano consentite solo origini attendibili se CORS è abilitato nelle applicazioni Web ASP.NETEnsure that only trusted origins are allowed if CORS is enabled on ASP.NET Web Applications

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies Web Form, MVC 5Web Forms, MVC5
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps

La sicurezza del browser impedisce a una pagina Web di creare richieste AJAX per un altro dominio.Browser security prevents a web page from making AJAX requests to another domain. Questa restrizione è nota come criteri di corrispondenza dell'origine e impedisce a un sito dannoso di leggere dati sensibili da un altro sito.This restriction is called the same-origin policy, and prevents a malicious site from reading sensitive data from another site. In alcuni casi può tuttavia essere necessario esporre in modo sicuro le API che gli altri siti possono utilizzare.However, sometimes it might be required to expose APIs securely which other sites can consume. Cross Origin Resource Sharing (CORS) è uno standard W3C che consente a un server di ridurre i criteri di corrispondenza dell'origine.Cross Origin Resource Sharing (CORS) is a W3C standard that allows a server to relax the same-origin policy. Con CORS un server può consentire in modo esplicito alcune richieste multiorigine e rifiutarne altre.Using CORS, a server can explicitly allow some cross-origin requests while rejecting others.

CORS è più sicuro e flessibile delle tecniche precedenti, ad esempio JSONP.CORS is safer and more flexible than earlier techniques such as JSONP. In sostanza, abilitando CORS sarà possibile aggiungere alcune intestazioni della risposta HTTP (Access-Control-) all'applicazione Web in due modi.At its core, enabling CORS translates to adding a few HTTP response headers (Access-Control-) to the web application and this can be done in a couple of ways.

EsempioExample

Se è disponibile l'accesso a Web.config, CORS può essere aggiunto tramite il codice seguente:If access to Web.config is available, then CORS can be added through the following code:

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

EsempioExample

Se non è disponibile l'accesso a Web.config, CORS può essere configurato aggiungendo il codice CSharp seguente:If access to web.config is not available, then CORS can be configured by adding the following CSharp code:

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

Si noti che è fondamentale assicurarsi che l'elenco di origini nell'attributo "Access-Control-Allow-Origin" venga impostato su un set finito e attendibile di origini.Please note that it is critical to ensure that the list of origins in "Access-Control-Allow-Origin" attribute is set to a finite and trusted set of origins. Se la configurazione non è corretta (ad esempio, se si imposta il valore come ""), i siti dannosi potranno attivare richieste multiorigine per l'applicazione Web senza alcuna restrizione, rendendo in questo modo l'applicazione vulnerabile agli attacchi CSRF.Failing to configure this inappropriately (e.g., setting the value as '') will allow malicious sites to trigger cross origin requests to the web application >without any restrictions, thereby making the application vulnerable to CSRF attacks.

Abilitare l'attributo ValidateRequest nelle pagine ASP.NETEnable ValidateRequest attribute on ASP.NET Pages

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies Web Form, MVC 5Web Forms, MVC5
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Request Validation - Preventing Script Attacks (Convalida della richiesta: prevenzione degli attacchi basati su script)Request Validation - Preventing Script Attacks
PassaggiSteps

La convalida della richiesta, una funzionalità di ASP.NET sin dalla versione 1.1, impedisce al server di accettare contenuti che includono HTML non codificato.Request validation, a feature of ASP.NET since version 1.1, prevents the server from accepting content containing un-encoded HTML. Questa funzionalità è progettata per impedire alcuni attacchi script injection in cui il codice script client o HTML può essere inconsapevolmente inviato a un server, archiviato e quindi presentato ad altri utenti.This feature is designed to help prevent some script-injection attacks whereby client script code or HTML can be unknowingly submitted to a server, stored, and then presented to other users. È tuttavia vivamente consigliabile convalidare tutti i dati di input e codificarli con HTML, se appropriato.We still strongly recommend that you validate all input data and HTML encode it when appropriate.

La convalida della richiesta viene eseguita confrontando tutti i dati di input con un elenco di valori potenzialmente pericolosi.Request validation is performed by comparing all input data to a list of potentially dangerous values. Se viene rilevata una corrispondenza, ASP.NET genera HttpRequestValidationException.If a match occurs, ASP.NET raises an HttpRequestValidationException. Per impostazione predefinita, la funzionalità di convalida della richiesta è abilitata.By default, Request Validation feature is enabled.

EsempioExample

Questa funzionalità può essere tuttavia disabilitata a livello di pagina:However, this feature can be disabled at page level:

<%@ Page validateRequest="false" %> 

o a livello di applicazione.or, at application level

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

Si noti che la funzionalità di convalida della richiesta non è supportata e non fa parte della pipeline MVC 6.Please note that Request Validation feature is not supported, and is not part of MVC6 pipeline.

Usare le versioni più recenti ospitate in locale delle librerie JavaScriptUse locally-hosted latest versions of JavaScript libraries

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps

Gli sviluppatori che usano librerie JavaScript standard, ad esempio JQuery, devono usare versioni approvate delle comuni librerie JavaScript che non contengono difetti di sicurezza noti.Developers using standard JavaScript libraries like JQuery must use approved versions of common JavaScript libraries that do not contain known security flaws. È consigliabile usare la versione più recente delle librerie, perché contiene aggiornamenti della sicurezza per le vulnerabilità note delle versioni precedenti.A good practice is to use the most latest version of the libraries, since they contain security fixes for known vulnerabilities in their older versions.

Se la versione più recente non può essere usata per motivi di compatibilità, è consigliabile usare la versione inferiore a quella minima.If the most recent release cannot be used due to compatibility reasons, the below minimum versions should be used.

Versioni minime accettabili:Acceptable minimum versions:

  • JQueryJQuery
    • JQuery 1.7.1JQuery 1.7.1
    • JQueryUI 1.10.0JQueryUI 1.10.0
    • JQuery Validate 1.9JQuery Validate 1.9
    • JQuery Mobile 1.0.1JQuery Mobile 1.0.1
    • JQuery Cycle 2.99JQuery Cycle 2.99
    • JQuery DataTables 1.9.0JQuery DataTables 1.9.0
  • Ajax Control ToolkitAjax Control Toolkit
    • Ajax Control Toolkit 40412Ajax Control Toolkit 40412
  • Web Form ASP.NET e AjaxASP.NET Web Forms and Ajax
    • Web Form ASP.NET e Ajax 4ASP.NET Web Forms and Ajax 4
    • ASP.NET Ajax 3.5ASP.NET Ajax 3.5
  • ASP.NET MVCASP.NET MVC
    • ASP.NET MVC 3.0ASP.NET MVC 3.0

Non caricare mai librerie JavaScript da siti esterni, ad esempio reti CDN pubbliche.Never load any JavaScript library from external sites such as public CDNs

Disabilitare l'analisi MIME automaticaDisable automatic MIME sniffing

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences IE8 Security Part V: Comprehensive Protection (Sicurezza di IE8 parte V: protezione completa), MIME type (Tipo MIME)IE8 Security Part V: Comprehensive Protection, MIME type
PassaggiSteps L'intestazione X-Content-Type-Options è un'intestazione HTTP che consente agli sviluppatori di specificare che il contenuto non deve essere sottoposto ad analisi MIME.The X-Content-Type-Options header is an HTTP header that allows developers to specify that their content should not be MIME-sniffed. Questa intestazione è progettata per mitigare gli attacchi basati sull'analisi MIME.This header is designed to mitigate MIME-Sniffing attacks. Per ogni pagina che potrebbe includere contenuti controllabili dall'utente, è necessario usare l'intestazione HTTP X-Content-Type-Options:nosniff.For each page that could contain user controllable content, you must use the HTTP Header X-Content-Type-Options:nosniff. Per abilitare l'intestazione necessaria a livello globale per tutte le pagine nell'applicazione, eseguire una di queste operazioni.To enable the required header globally for all pages in the application, you can do one of the following

EsempioExample

Aggiungere l'intestazione nel file web.config se l'applicazione è ospitata da Internet Information Services (IIS) 7 o versione successiva.Add the header in the web.config file if the application is hosted by Internet Information Services (IIS) 7 onwards.

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

EsempioExample

Aggiungere l'intestazione tramite Application_BeginRequest globale.Add the header through the global Application_BeginRequest

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

EsempioExample

Implementare un modulo HTTP personalizzato.Implement custom HTTP module

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");
}
}

EsempioExample

È possibile abilitare l'intestazione necessaria solo per pagine specifiche aggiungendola a singole risposte:You can enable the required header only for specific pages by adding it to individual responses:

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

Rimuovere le intestazioni del server standard nei siti Web di Microsoft Azure per evitare la creazione di impronte digitaliRemove standard server headers on Windows Azure Web Sites to avoid fingerprinting

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipo di ambiente: AzureEnvironmentType - Azure
RiferimentiReferences Removing standard server headers on Windows Azure Web Sites (Rimozione di intestazioni del server standard nei siti Web di Microsoft Azure)Removing standard server headers on Windows Azure Web Sites
PassaggiSteps Intestazioni come Server, X-Powered-By e X-AspNet-Version rivelano informazioni sul server e sulle tecnologie sottostanti.Headers such as Server, X-Powered-By, X-AspNet-Version reveal information about the server and the underlying technologies. È consigliabile eliminare queste intestazioni evitando così di creare impronte digitali dell'applicazioneIt is recommended to suppress these headers thereby preventing fingerprinting the application

Configurare Windows Firewall per l'accesso al motore di databaseConfigure a Windows Firewall for Database Engine Access

TitoloTitle DettagliDetails
ComponenteComponent DatabaseDatabase
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies SQL Azure, localeSQL Azure, OnPrem
Attributes (Attributi) (Attributi)Attributes N/D, versione SQL: V12N/A, SQL Version - V12
RiferimentiReferences Come configurare un firewall per il database SQL di Azure, Configurare Windows Firewall per l'accesso al motore di databaseHow to configure an Azure SQL database firewall, Configure a Windows Firewall for Database Engine Access
PassaggiSteps I sistemi firewall consentono di impedire l'accesso non autorizzato alle risorse del computer.Firewall systems help prevent unauthorized access to computer resources. Per accedere a un'istanza del motore di database di SQL Server tramite un firewall, è necessario configurare il firewall sul computer che esegue SQL Server per consentire l'accesso.To access an instance of the SQL Server Database Engine through a firewall, you must configure the firewall on the computer running SQL Server to allow access

Assicurarsi che siano consentite solo origini attendibili se CORS è abilitato nell'API Web ASP.NETEnsure that only trusted origins are allowed if CORS is enabled on ASP.NET Web API

TitoloTitle DettagliDetails
ComponenteComponent API WebWeb API
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies MVC 5MVC 5
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Enabling Cross-Origin Requests in ASP.NET Web API 2 (Abilitazione di richieste multiorigine nell'API Web ASP.NET 2), API Web ASP.NET: supporto di CORS nell'API Web ASP.NET 2Enabling Cross-Origin Requests in ASP.NET Web API 2, ASP.NET Web API - CORS Support in ASP.NET Web API 2
PassaggiSteps

La sicurezza del browser impedisce a una pagina Web di creare richieste AJAX per un altro dominio.Browser security prevents a web page from making AJAX requests to another domain. Questa restrizione è nota come criteri di corrispondenza dell'origine e impedisce a un sito dannoso di leggere dati sensibili da un altro sito.This restriction is called the same-origin policy, and prevents a malicious site from reading sensitive data from another site. In alcuni casi può tuttavia essere necessario esporre in modo sicuro le API che gli altri siti possono utilizzare.However, sometimes it might be required to expose APIs securely which other sites can consume. Cross Origin Resource Sharing (CORS) è uno standard W3C che consente a un server di ridurre i criteri di corrispondenza dell'origine.Cross Origin Resource Sharing (CORS) is a W3C standard that allows a server to relax the same-origin policy.

Con CORS un server può consentire in modo esplicito alcune richieste multiorigine e rifiutarne altre.Using CORS, a server can explicitly allow some cross-origin requests while rejecting others. CORS è più sicuro e flessibile delle tecniche precedenti, ad esempio JSONP.CORS is safer and more flexible than earlier techniques such as JSONP.

EsempioExample

In App_Start/WebApiConfig.cs aggiungere il codice seguente al metodo WebApiConfig.Register.In the App_Start/WebApiConfig.cs, add the following code to the WebApiConfig.Register method

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 }
            );
        }
    }
}

EsempioExample

L'attributo EnableCors può essere applicato ai metodi di azione in un controller, come segue:EnableCors attribute can be applied to action methods in a controller as follows:

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);
  }
}

Si noti che è fondamentale assicurarsi che l'elenco di origini nell'attributo EnableCors venga impostato su un set finito e attendibile di origini.Please note that it is critical to ensure that the list of origins in EnableCors attribute is set to a finite and trusted set of origins. Se la configurazione non è corretta (ad esempio, se si imposta il valore come ""), i siti dannosi potranno attivare richieste multiorigine per l'API senza alcuna restrizione, rendendo in questo modo l'API vulnerabile agli attacchi CSRF.Failing to configure this inappropriately (e.g., setting the value as '') will allow malicious sites to trigger cross origin requests to the API without any restrictions, >thereby making the API vulnerable to CSRF attacks. EnableCors può essere decorato a livello di controller.EnableCors can be decorated at controller level.

EsempioExample

Per disabilitare CORS in un determinato metodo di una classe, l'attributo DisableCors può essere usato come illustrato sotto:To disable CORS on a particular method in a class, the DisableCors attribute can be used as shown below:

[EnableCors("http://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);
  }
}
TitoloTitle DettagliDetails
ComponenteComponent API WebWeb API
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies MVC 6MVC 6
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Enabling Cross-Origin Requests (CORS) in ASP.NET Core 1.0 (Abilitazione di richieste multiorigine (CORS) in ASP.NET Core 1.0)Enabling Cross-Origin Requests (CORS) in ASP.NET Core 1.0
PassaggiSteps

In ASP.NET Core 1.0 CORS può essere abilitato usando il middleware o MVC.In ASP.NET Core 1.0, CORS can be enabled either using middleware or using MVC. Quando si usa MVC per abilitare CORS, vengono usati gli stessi servizi CORS, ma non il middleware CORS.When using MVC to enable CORS the same CORS services are used, but the CORS middleware is not.

Approccio 1 Abilitazione di CORS con il middleware: per abilitare CORS per l'intera applicazione, aggiungere il middleware CORS alla pipeline di richieste usando il metodo di estensione UseCors.Approach-1 Enabling CORS with middleware: To enable CORS for the entire application add the CORS middleware to the request pipeline using the UseCors extension method. Si possono specificare criteri multiorigine quando si aggiunge il middleware CORS usando la classe CorsPolicyBuilder.A cross-origin policy can be specified when adding the CORS middleware using the CorsPolicyBuilder class. A questo scopo è possibile procedere in due modi:There are two ways to do this:

EsempioExample

Il primo consiste nel chiamare UseCors con un operatore lambda.The first is to call UseCors with a lambda. L'operatore lambda accetta un oggetto CorsPolicyBuilder:The lambda takes a CorsPolicyBuilder object:

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

EsempioExample

Il secondo consiste nel definire uno più criteri CORS denominati e quindi nel selezionare i criteri per nome in fase di esecuzione.The second is to define one or more named CORS policies, and then select the policy by name at run time.

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

Approccio 2 Abilitazione di CORS in MVC: in alternativa gli sviluppatori possono usare MVC per applicare CORS specifici per azione, per controller o a livello globale per tutti i controller.Approach-2 Enabling CORS in MVC: Developers can alternatively use MVC to apply specific CORS per action, per controller, or globally for all controllers.

EsempioExample

Per azione: per specificare un criterio CORS per un'azione specifica, aggiungere l'attributo [EnableCors] all'azione.Per action: To specify a CORS policy for a specific action add the [EnableCors] attribute to the action. Specificare il nome del criterio.Specify the policy name.

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

EsempioExample

Per controller:Per controller:

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

EsempioExample

A livello globale:Globally:

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

Si noti che è fondamentale assicurarsi che l'elenco di origini nell'attributo EnableCors venga impostato su un set finito e attendibile di origini.Please note that it is critical to ensure that the list of origins in EnableCors attribute is set to a finite and trusted set of origins. Se la configurazione non è corretta (ad esempio, se si imposta il valore come ""), i siti dannosi potranno attivare richieste multiorigine per l'API senza alcuna restrizione, rendendo in questo modo l'API vulnerabile agli attacchi CSRF.Failing to configure this inappropriately (e.g., setting the value as '') will allow malicious sites to trigger cross origin requests to the API without any restrictions, >thereby making the API vulnerable to CSRF attacks.

EsempioExample

Per disabilitare CORS per un controller o un'azione, usare l'attributo [DisableCors].To disable CORS for a controller or action, use the [DisableCors] attribute.

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

Crittografare le sezioni dei file di configurazione dell'API Web contenenti dati sensibiliEncrypt sections of Web API's configuration files that contain sensitive data

TitoloTitle DettagliDetails
ComponenteComponent API WebWeb API
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI (Procedura: Crittografare le sezioni di configurazione in ASP.NET 2.0 usando DPAPI), Specifica di un provider di configurazione protetta, Using Azure Key Vault to protect application secrets (Uso di Azure Key Vault per proteggere i segreti dell'applicazione)How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI, Specifying a Protected Configuration Provider, Using Azure Key Vault to protect application secrets
PassaggiSteps I file di configurazione, ad esempio Web.config e appsettings.json, vengono spesso usati per memorizzare informazioni sensibili, inclusi nomi utente, password, stringhe di connessione del database e chiavi di crittografia.Configuration files such as the Web.config, appsettings.json are often used to hold sensitive information, including user names, passwords, database connection strings, and encryption keys. Se non si proteggono queste informazioni, l'applicazione è vulnerabile agli utenti malintenzionati che ottengono informazioni sensibili, ad esempio nomi account utente e password, nomi dei database e nomi dei server.If you do not protect this information, your application is vulnerable to attackers or malicious users obtaining sensitive information such as account user names and passwords, database names and server names. In base al tipo di distribuzione (Azure/locale), crittografare le sezioni sensibili dei file config usando DPAPI o servizi come Azure Key Vault.Based on the deployment type (azure/on-prem), encrypt the sensitive sections of config files using DPAPI or services like Azure Key Vault.

Assicurarsi che tutte le interfacce amministrative siano protette con credenziali sicureEnsure that all admin interfaces are secured with strong credentials

TitoloTitle DettagliDetails
ComponenteComponent Dispositivo IoTIoT Device
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Tutte le interfacce amministrative esposte dal dispositivo o dal gateway sul campo devono essere protette con credenziali sicure.Any administrative interfaces that the device or field gateway exposes should be secured using strong credentials. Anche tutte le altre interfacce esposte, ad esempio WiFi, SSH, condivisioni file e FTP, devono essere protette con credenziali sicure.Also, any other exposed interfaces like WiFi, SSH, File shares, FTP should be secured with strong credentials. Non si devono usare le password vulnerabili predefinite.Default weak passwords should not be used.

Assicurarsi che un codice sconosciuto non possa essere eseguito sui dispositiviEnsure that unknown code cannot execute on devices

TitoloTitle DettagliDetails
ComponenteComponent Dispositivo IoTIoT Device
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Enabling Secure Boot and bit-locker Device Encryption on Windows 10 IoT Core (Abilitazione dell'avvio protetto e della crittografia dispositivo BitLocker in Windows 10 IoT Core)Enabling Secure Boot and bit-locker Device Encryption on Windows 10 IoT Core
PassaggiSteps L'avvio protetto UEFI limita il sistema consentendo solo l'esecuzione di file binari firmati da un'autorità specificata.UEFI Secure Boot restricts the system to only allow execution of binaries signed by a specified authority. Questa funzionalità impedisce l'esecuzione di codice sconosciuto sulla piattaforma e il potenziale indebolimento del comportamento di sicurezza.This feature prevents unknown code from being executed on the platform and potentially weakening the security posture of it. Abilitare l'avvio protetto UEFI e limitare l'elenco di autorità di certificazione considerate attendibili per la firma del codice.Enable UEFI Secure Boot and restrict the list of certificate authorities that are trusted for signing code. Firmare tutto il codice distribuito nel dispositivo usando una delle autorità attendibili.Sign all code that is deployed on the device using one of the trusted authorities.

Crittografare il sistema operativo e altre partizioni del dispositivo IoT con bit-lockerEncrypt OS and additional partitions of IoT Device with bit-locker

TitoloTitle DettagliDetails
ComponenteComponent Dispositivo IoTIoT Device
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Windows 10 IoT Core implementa una versione lightweight della crittografia dispositivo bit-locker, che dipende fortemente dalla presenza di un modulo TPM nella piattaforma, incluso il protocollo preOS necessario in UEFI che esegue le misurazioni necessarie.Windows 10 IoT Core implements a lightweight version of bit-locker Device Encryption, which has a strong dependency on the presence of a TPM on the platform, including the necessary preOS protocol in UEFI that conducts the necessary measurements. Queste misurazioni preOS assicurano che in seguito il sistema operativo conservi un record definitivo di come è stato avviato. Crittografare le partizioni del sistema operativo che usano bit-locker ed eventuali partizioni aggiuntive anche nel caso in cui archivino dati sensibili.These preOS measurements ensure that the OS later has a definitive record of how the OS was launched.Encrypt OS partitions using bit-locker and any additional partitions also in case they store any sensitive data.

Assicurarsi che sui dispositivi siano abilitati solo servizi/funzionalità minimeEnsure that only the minimum services/features are enabled on devices

TitoloTitle DettagliDetails
ComponenteComponent Dispositivo IoTIoT Device
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Non abilitare né disattivare funzionalità o servizi del sistema operativo non necessari per il funzionamento della soluzione.Do not enable or turn off any features or services in the OS that is not required for the functioning of the solution. Se, ad esempio, il dispositivo non richiede la distribuzione di un'interfaccia utente, installare Windows IoT Core in modalità headless.For e.g. if the device does not require a UI to be deployed, install Windows IoT Core in headless mode.

Crittografare il sistema operativo e altre partizioni del gateway IoT sul campo con bit-lockerEncrypt OS and additional partitions of IoT Field Gateway with bit-locker

TitoloTitle DettagliDetails
ComponenteComponent Gateway IoT sul campoIoT Field Gateway
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Windows 10 IoT Core implementa una versione lightweight della crittografia dispositivo bit-locker, che dipende fortemente dalla presenza di un modulo TPM nella piattaforma, incluso il protocollo preOS necessario in UEFI che esegue le misurazioni necessarie.Windows 10 IoT Core implements a lightweight version of bit-locker Device Encryption, which has a strong dependency on the presence of a TPM on the platform, including the necessary preOS protocol in UEFI that conducts the necessary measurements. Queste misurazioni preOS assicurano che in seguito il sistema operativo conservi un record definitivo di come è stato avviato. Crittografare le partizioni del sistema operativo che usano bit-locker ed eventuali partizioni aggiuntive anche nel caso in cui archivino dati sensibili.These preOS measurements ensure that the OS later has a definitive record of how the OS was launched.Encrypt OS partitions using bit-locker and any additional partitions also in case they store any sensitive data.

Assicurarsi che le credenziali di accesso predefinite del gateway sul campo vengano modificate durante l'installazioneEnsure that the default login credentials of the field gateway are changed during installation

TitoloTitle DettagliDetails
ComponenteComponent Gateway IoT sul campoIoT Field Gateway
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Assicurarsi che le credenziali di accesso predefinite del gateway sul campo vengano modificate durante l'installazioneEnsure that the default login credentials of the field gateway are changed during installation

Assicurarsi che il gateway nel cloud implementi un processo per mantenere aggiornato il firmware dei dispositivi connessiEnsure that the Cloud Gateway implements a process to keep the connected devices firmware up to date

TitoloTitle DettagliDetails
ComponenteComponent Gateway IoT cloudIoT Cloud Gateway
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Opzione gateway: Hub IoT di AzureGateway choice - Azure IoT Hub
RiferimentiReferences Panoramica della gestione dei dispositivi con l'hub IoT, How to update Device Firmware (Come aggiornare il firmware di un dispositivo)IoT Hub Device Management Overview, How to update Device Firmware
PassaggiSteps LWM2M è un protocollo di Open Mobile Alliance per la gestione dei dispositivi IoT.LWM2M is a protocol from the Open Mobile Alliance for IoT Device Management. Gestione dei dispositivi dell'hub IoT di Azure consente di interagire con dispositivi fisici tramite processi del dispositivo.Azure IoT device management allows to interact with physical devices using device jobs. Assicurarsi che il gateway nel cloud implementi a processo per mantenere regolarmente aggiornati il dispositivo e gli altri dati di configurazione usando Gestione dei dispositivi dell'hub IoT di Azure.Ensure that the Cloud Gateway implements a process to routinely keep the device and other configuration data up to date using Azure IoT Hub Device Management.

Assicurarsi che i dispositivi abbiano i controlli di sicurezza degli endpoint configurati in base ai criteri organizzativiEnsure that devices have end-point security controls configured as per organizational policies

TitoloTitle DettagliDetails
ComponenteComponent Limite di trust dei computerMachine Trust Boundary
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Assicurarsi che i dispositivi abbiano controlli di sicurezza degli endpoint, ad esempio bit-locker per la crittografia a livello di disco, antivirus con firme aggiornate, firewall basato su host, aggiornamenti del sistema operativo, criteri di gruppo e così via, configurati in base ai criteri di sicurezza dell'organizzazione.Ensure that devices have end-point security controls such as bit-locker for disk-level encryption, anti-virus with updated signatures, host based firewall, OS upgrades, group policies etc. are configured as per organizational security policies.

Assicurare una gestione sicura delle chiavi di accesso alle risorse di archiviazione di AzureEnsure secure management of Azure storage access keys

TitoloTitle DettagliDetails
ComponenteComponent Archiviazione di AzureAzure Storage
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Guida alla sicurezza di Archiviazione di Azure: gestione delle chiavi dell'account di archiviazioneAzure Storage security guide - Managing Your Storage Account Keys
PassaggiSteps

Archiviazione chiavi: è consigliabile archiviare le chiavi di accesso alle risorse di archiviazione di Azure in Azure Key Vault come segreto e fare in modo che le applicazioni recuperino la chiave dall'insieme di credenziali delle chiavi.Key Storage: It is recommended to store the Azure Storage access keys in Azure Key Vault as a secret and have the applications retrieve the key from key vault. È consigliabile per i motivi seguenti:This is recommended due to the following reasons:

  • L'applicazione non avrà mai una chiave di archiviazione hardcoded in un file di configurazione, eliminando la possibilità che qualcuno possa ottenere l'accesso alle chiavi senza un'autorizzazione specifica.The application will never have the storage key hardcoded in a configuration file, which removes that avenue of somebody getting access to the keys without specific permission
  • L'accesso alle chiavi può essere controllato con Azure Active Directory.Access to the keys can be controlled using Azure Active Directory. Il proprietario dell'account può quindi concedere l'accesso solo alle applicazioni che devono recuperare le chiavi da Azure Key Vault.This means an account owner can grant access to the handful of applications that need to retrieve the keys from Azure Key Vault. Le altre applicazioni non riusciranno ad accedere alle chiavi se non vengono loro concesse autorizzazioni specifiche.Other applications will not be able to access the keys without granting them permission specifically
  • Rigenerazione delle chiavi: è consigliabile avere un processo attivo per rigenerare le chiavi di accesso alle risorse di archiviazione di Azure per motivi di sicurezza.Key Regeneration: It is recommended to have a process in place to regenerate Azure storage access keys for security reasons. I dettagli su perché e come pianificare la rigenerazione delle chiavi sono documentati nell'articolo di riferimento Guida alla sicurezza di Archiviazione di Azure.Details on why and how to plan for key regeneration are documented in the Azure Storage Security Guide reference article

Assicurarsi che siano consentite solo origini attendibili se CORS è abilitato in Archiviazione di AzureEnsure that only trusted origins are allowed if CORS is enabled on Azure storage

TitoloTitle DettagliDetails
ComponenteComponent Archiviazione di AzureAzure Storage
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Supporto di CORS per i servizi di archiviazione di AzureCORS Support for the Azure Storage Services
PassaggiSteps Archiviazione di Azure consente di abilitare CORS (Condivisione risorse tra le origini).Azure Storage allows you to enable CORS – Cross Origin Resource Sharing. Per ogni account di archiviazione è possibile specificare i domini che possono accedere alle risorse in tale account di archiviazione.For each storage account, you can specify domains that can access the resources in that storage account. Per impostazione predefinita, CORS è disabilitato in tutti i servizi.By default, CORS is disabled on all services. È possibile abilitare CORS con l'API REST o la libreria client di archiviazione per chiamare uno dei metodi che impostano i criteri del servizio.You can enable CORS by using the REST API or the storage client library to call one of the methods to set the service policies.

Abilitare la funzionalità di limitazione dei servizi di WCFEnable WCF's service throttling feature

TitoloTitle DettagliDetails
ComponenteComponent WCFWCF
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies .NET Framework 3.NET Framework 3
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences MSDN, Fortify KingdomMSDN, Fortify Kingdom
PassaggiSteps

Se non si imposta un limite all'uso delle risorse di sistema, potrebbe verificarsi un problema di esaurimento risorse e infine di Denial of Service.Not placing a limit on the use of system resources could result in resource exhaustion and ultimately a denial of service.

  • SPIEGAZIONE: Windows Communication Foundation (WCF) offre la possibilità di limitare le richieste di servizio.EXPLANATION: Windows Communication Foundation (WCF) offers the ability to throttle service requests. Se si consentono troppe richieste client, un sistema può riempirsi ed esaurire le risorse.Allowing too many client requests can flood a system and exhaust its resources. Al contrario, consentire solo un numero ridotto di richieste per un servizio può impedire ai legittimi utenti di usare il servizio.On the other hand, allowing only a small number of requests to a service can prevent legitimate users from using the service. Ogni singolo servizio deve essere ottimizzato e configurato per consentire la quantità appropriata di risorse.Each service should be individually tuned to and configured to allow the appropriate amount of resources.
  • SUGGERIMENTI Abilitare la funzionalità di limitazione del servizio di WCF e impostare limiti appropriati per l'applicazione.RECOMMENDATIONS Enable WCF's service throttling feature and set limits appropriate for your application.

EsempioExample

Di seguito è riportato un esempio di configurazione con la funzionalità di limitazione abilitata:The following is an example configuration with throttling enabled:

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

Diffusione di informazioni di WCF tramite i metadatiWCF-Information disclosure through metadata

TitoloTitle DettagliDetails
ComponenteComponent WCFWCF
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies .NET Framework 3.NET Framework 3
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences MSDN, Fortify KingdomMSDN, Fortify Kingdom
PassaggiSteps I metadati possono consentire agli utenti malintenzionati di ottenere informazioni sul sistema e di pianificare un attacco.Metadata can help attackers learn about the system and plan a form of attack. I servizi WCF possono essere configurati per esporre i metadati.WCF services can be configured to expose metadata. I metadati offrono informazioni dettagliate sui servizi e non devono essere trasmessi negli ambienti di produzione.Metadata gives detailed service description information and should not be broadcast in production environments. Le proprietà HttpGetEnabled / HttpsGetEnabled della classe ServiceMetaData definiscono se un servizio esporrà i metadati.The HttpGetEnabled / HttpsGetEnabled properties of the ServiceMetaData class defines whether a service will expose the metadata

EsempioExample

Il codice seguente indica a WCF di trasmettere i metadati di un servizio.The code below instructs WCF to broadcast a service's metadata

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

Non trasmettere i metadati del servizio in un ambiente di produzione.Do not broadcast service metadata in a production environment. Impostare le proprietà HttpGetEnabled/HttpsGetEnabled della classe ServiceMetaData su false.Set the HttpGetEnabled / HttpsGetEnabled properties of the ServiceMetaData class to false.

EsempioExample

Il codice seguente indica a WCF di non trasmettere i metadati di un servizio.The code below instructs WCF to not broadcast a service's metadata.

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