Udostępnij za pośrednictwem


Ramka zabezpieczeń: zarządzanie konfiguracją | Czynniki

Produkt/usługa Artykuł
Aplikacja internetowa
Baza danych
Internetowy interfejs API
Urządzenie IoT
Brama pola IoT
Brama chmury IoT
Granica zaufania maszyny
Azure Storage
WCF

Implementowanie zasad zabezpieczeń zawartości (CSP) i wyłączanie wbudowanego kodu JavaScript

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Wprowadzenie do zasad zabezpieczeń zawartości, dokumentacja zasad zabezpieczeń zawartości, wprowadzenie do zasad zabezpieczeń zawartości, czy mogę używać dostawcy CSP?
Kroki

Zasady zabezpieczeń zawartości (CSP) to mechanizm zabezpieczeń oparty na zabezpieczeniach, standard W3C, który umożliwia właścicielom aplikacji internetowych kontrolę nad zawartością osadzoną w ich witrynie. Dostawca usług kryptograficznych jest dodawany jako nagłówek odpowiedzi HTTP na serwerze internetowym i jest wymuszany po stronie klienta przez przeglądarki. Jest to dozwolone zasady oparte na liście — witryna internetowa może zadeklarować zestaw zaufanych domen, z których można załadować aktywną zawartość, taką jak JavaScript.

Dostawca CSP zapewnia następujące korzyści zabezpieczeń:

  • Ochrona przed XSS: jeśli strona jest podatna na zabezpieczenia XSS, osoba atakująca może wykorzystać ją na dwa sposoby:
    • Wstrzykiwanie <script>malicious code</script>. To wykorzystanie nie będzie działać z powodu podstawowego ograniczenia CSP-1
    • Wstrzykiwanie <script src="http://attacker.com/maliciousCode.js"/>. Ten program wykorzystujący luki nie będzie działać, ponieważ domena kontrolowana przez osobę atakującą nie będzie znajdować się na liście domen dozwolonych przez dostawcę CSP
  • Kontrola nad eksfiltracją danych: jeśli jakakolwiek złośliwa zawartość na stronie internetowej próbuje połączyć się z zewnętrzną witryną internetową i ukraść dane, połączenie zostanie przerwane przez dostawcę CSP. Dzieje się tak, ponieważ domena docelowa nie będzie znajdować się na liście dozwolonych dostawców CSP
  • Obrona przed kliknięciem: click-jacking jest techniką ataku, za pomocą której przeciwnik może oprawić prawdziwą witrynę internetową i zmusić użytkowników do kliknięcia elementów interfejsu użytkownika. Obecnie ochrona przed kliknięciem jest osiągana przez skonfigurowanie nagłówka odpowiedzi — X-Frame-Options. Nie wszystkie przeglądarki szanują ten nagłówek i będzie to standardowy sposób obrony przed kliknięciem jackingu
  • Raportowanie ataków w czasie rzeczywistym: w przypadku ataku iniekcyjnego w witrynie internetowej obsługującej program CSP przeglądarki automatycznie wyzwalają powiadomienie do punktu końcowego skonfigurowanego na serwerze internetowym. W ten sposób dostawca CSP służy jako system ostrzegawczy w czasie rzeczywistym.

Przykład

Przykładowe zasady:

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

Te zasady umożliwiają ładowanie skryptów tylko z serwera aplikacji internetowej i serwera google analytics. Skrypty załadowane z dowolnej innej witryny zostaną odrzucone. Po włączeniu programu CSP w witrynie internetowej następujące funkcje są automatycznie wyłączone w celu wyeliminowania ataków XSS.

Przykład

Skrypty wbudowane nie będą wykonywane. Poniżej przedstawiono przykłady wbudowanych skryptów

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

Przykład

Ciągi nie będą oceniane jako kod.

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

Włączanie filtru XSS przeglądarki

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Filtr ochrony XSS
Kroki

Konfiguracja nagłówka odpowiedzi X-XSS-Protection steruje filtrem skryptu między witrynami przeglądarki. Ten nagłówek odpowiedzi może mieć następujące wartości:

  • 0: Spowoduje to wyłączenie filtru
  • 1: Filter enabled Jeśli zostanie wykryty atak skryptowy między witrynami, aby zatrzymać atak, przeglądarka odczyści stronę
  • 1: mode=block : Filter enabled. Zamiast oczyszczać stronę, gdy zostanie wykryty atak XSS, przeglądarka uniemożliwi renderowanie strony
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Przeglądarka będzie oczyszczać stronę i zgłaszać naruszenie.

Jest to funkcja Chromium korzystająca z raportów naruszenia CSP w celu wysyłania szczegółów do wybranego identyfikatora URI. Dwie ostatnie opcje są uznawane za bezpieczne wartości.

ASP.NET aplikacje muszą wyłączyć śledzenie i debugowanie przed wdrożeniem

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja omówienie debugowania ASP.NET, omówienie śledzenia ASP.NET, instrukcje: włączanie śledzenia dla aplikacji ASP.NET, instrukcje: włączanie debugowania dla aplikacji ASP.NET
Kroki Po włączeniu śledzenia dla strony każda przeglądarka żądającą jej również uzyskuje informacje śledzenia zawierające dane dotyczące wewnętrznego stanu serwera i przepływu pracy. Te informacje mogą być poufne dla bezpieczeństwa. Po włączeniu debugowania dla strony błędy występujące na serwerze powodują wyświetlenie pełnych danych śledzenia stosu w przeglądarce. Te dane mogą uwidaczniać poufne informacje o przepływie pracy serwera.

Uzyskiwanie dostępu tylko do skryptów JavaScript innych firm z zaufanych źródeł

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki Odwołania do języków JavaScript innych firm powinny być przywołyne tylko z zaufanych źródeł. Punkty końcowe odwołania powinny zawsze znajdować się w protokole TLS.

Upewnij się, że uwierzytelnione strony ASP.NET zawierają mechanizmy ochrony zadośćuczynienia interfejsu użytkownika lub ochrony za pomocą kliknięć

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja OWASP click-jacking Defense Ściągawka, IE Internals - Walka click-jacking z X-Frame-Options
Kroki

Klikanie, znane również jako "atak zadośćuczynienia interfejsu użytkownika", polega na tym, że osoba atakująca używa wielu przezroczystych lub nieprzezroczystych warstw, aby skłonić użytkownika do kliknięcia przycisku lub linku na innej stronie, gdy zamierzali kliknąć stronę najwyższego poziomu.

Ta warstwa jest osiągana przez utworzenie złośliwej strony za pomocą elementu iframe, który ładuje stronę ofiary. W związku z tym osoba atakująca "przejmuje" kliknięcia przeznaczone dla swojej strony i kieruje je do innej strony, najprawdopodobniej należącej do innej aplikacji, domeny lub obu tych elementów. Aby zapobiec atakom typu click-jacking, ustaw odpowiednie nagłówki odpowiedzi HTTP X-Frame-Options, które instruują przeglądarkę, aby nie zezwalała na tworzenie ramek z innych domen

Przykład

Nagłówek X-FRAME-OPTIONS można ustawić za pośrednictwem pliku web.config usług IIS. Fragment kodu Web.config dla witryn, które nigdy nie powinny być oprawione:

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

Przykład

Kod Web.config dla witryn, które powinny być oprawione tylko przez strony w tej samej domenie:

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

Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w usłudze ASP.NET Web Applications

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Web Forms, MVC5
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki

Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie jest nazywane zasadami tego samego źródła i uniemożliwia złośliwej witrynie odczytywanie poufnych danych z innej witryny. Czasami jednak może być konieczne bezpieczne uwidocznienie interfejsów API, z których mogą korzystać inne witryny. Współużytkowanie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego źródła. Przy użyciu mechanizmu CORS serwer może jawnie zezwalać na niektóre żądania między źródłami podczas odrzucania innych.

MECHANIZM CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP. Włączenie mechanizmu CORS przekłada się na dodanie kilku nagłówków odpowiedzi HTTP (Access-Control-*) do aplikacji internetowej i można to zrobić na kilka sposobów.

Przykład

Jeśli dostęp do pliku Web.config jest dostępny, mechanizm CORS można dodać za pomocą następującego kodu:

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

Przykład

Jeśli dostęp do pliku web.config jest niedostępny, mechanizm CORS można skonfigurować, dodając następujący kod języka C#:

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

Należy pamiętać, że należy upewnić się, że lista źródeł w atrybucie "Access-Control-Allow-Origin" jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do aplikacji internetowej bez żadnych ograniczeń, co naraża aplikację >na ataki CSRF.

Włączanie atrybutu ValidateRequest na stronach ASP.NET

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Web Forms, MVC5
Atrybuty Nie dotyczy
Dokumentacja Żądanie weryfikacji — zapobieganie atakom skryptów
Kroki

Weryfikacja żądania, funkcja ASP.NET od wersji 1.1, zapobiega przyjęciu przez serwer treści zawierającej niezakodowany plik HTML. Ta funkcja została zaprojektowana tak, aby zapobiec atakom z iniekcją skryptów, podczas których kod skrypt klienta lub HTML może być nieświadomie przesłany na serwer, przechowywany i prezentowany innym użytkownikom. Zdecydowanie zaleca się, aby weryfikować wszystkie dane wejściowe i kod HTML zawsze, gdy to konieczne.

Weryfikacja żądania jest wykonywana przez porównanie wszystkich danych wejściowych z listą potencjalnie niebezpiecznych wartości. Jeśli wystąpi dopasowanie, ASP.NET zgłasza wartość HttpRequestValidationException. Domyślnie funkcja walidacji żądań jest włączona.

Przykład

Tę funkcję można jednak wyłączyć na poziomie strony:

<%@ Page validateRequest="false" %> 

lub na poziomie aplikacji

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

Należy pamiętać, że funkcja walidacji żądania nie jest obsługiwana i nie jest częścią potoku MVC6.

Używanie lokalnie hostowanych najnowszych wersji bibliotek Języka JavaScript

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki

Deweloperzy korzystający ze standardowych bibliotek Języka JavaScript, takich jak JQuery, muszą używać zatwierdzonych wersji typowych bibliotek Języka JavaScript, które nie zawierają znanych wad zabezpieczeń. Dobrym rozwiązaniem jest użycie najnowszej wersji bibliotek, ponieważ zawierają poprawki zabezpieczeń dla znanych luk w zabezpieczeniach w starszych wersjach.

Jeśli nie można użyć najnowszej wersji ze względu na zgodność, należy użyć poniższych minimalnych wersji.

Dopuszczalne wersje minimalne:

  • Jquery
    • JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validate 1.9
    • JQuery Mobile 1.0.1
    • Cykl JQuery 2.99
    • JQuery DataTables 1.9.0
  • Ajax Control Toolkit
    • Zestaw narzędzi Ajax Control Toolkit 40412
  • ASP.NET Web Forms i Ajax
    • ASP.NET Web Forms i AJAX 4
    • ASP.NET AJAX 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Nigdy nie załaduj żadnej biblioteki Języka JavaScript z witryn zewnętrznych, takich jak publiczne sieci CDN

Wyłączanie automatycznego wąchania MIME

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Część Zabezpieczeń IE8 V: kompleksowa ochrona, typ MIME
Kroki Nagłówek X-Content-Type-Options to nagłówek HTTP, który umożliwia deweloperom określenie, że ich zawartość nie powinna być wyśmiewane przez protokół MIME. Ten nagłówek jest przeznaczony do eliminowania ataków MIME-Sniffing. Dla każdej strony, która może zawierać zawartość z możliwością sterowania przez użytkownika, należy użyć nagłówka HTTP X-Content-Type-Options:nosniff. Aby włączyć wymagany nagłówek globalnie dla wszystkich stron w aplikacji, możesz wykonać jedną z następujących czynności

Przykład

Dodaj nagłówek w pliku web.config, jeśli aplikacja jest hostowana przez usługi Internet Information Services (IIS) 7.

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

Przykład

Dodawanie nagłówka za pośrednictwem Application_BeginRequest globalnej

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

Przykład

Implementowanie niestandardowego modułu HTTP

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

Przykład

Wymagany nagłówek można włączyć tylko dla określonych stron, dodając go do poszczególnych odpowiedzi:

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

Usuwanie standardowych nagłówków serwera w witrynach sieci Web platformy Windows Azure, aby uniknąć odcisku palca

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty EnvironmentType — Azure
Dokumentacja Removing standard server headers on Windows Azure Web Sites (Usuwanie standardowych nagłówków serwera w witrynach sieci Web platformy Windows Azure)
Kroki Nagłówki, takie jak Server, X-Powered-By, X-AspNet-Version ujawniają informacje o serwerze i podstawowych technologiach. Zaleca się pomijanie tych nagłówków, zapobiegając tym samym odciskom palca aplikacji

Konfigurowanie zapory systemu Windows pod kątem dostępu do aparatu bazy danych

Tytuł Szczegóły
Składnik Baza danych
Faza SDL Tworzenie
Odpowiednie technologie Usługi SQL Azure, OnPrem
Atrybuty N/A, wersja SQL — wersja 12
Dokumentacja Jak skonfigurować zaporę usługi Azure SQL Database, skonfigurować zaporę systemu Windows na potrzeby dostępu do aparatu bazy danych
Kroki Systemy zapory zapobiegają nieautoryzowanemu dostępowi do zasobów komputera. Aby uzyskać dostęp do wystąpienia aparatu bazy danych programu SQL Server za pośrednictwem zapory, należy skonfigurować zaporę na komputerze z uruchomionym programem SQL Server, aby zezwolić na dostęp

Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w interfejsie API sieci Web ASP.NET

Tytuł Szczegóły
Składnik Internetowy interfejs API
Faza SDL Tworzenie
Odpowiednie technologie MVC 5
Atrybuty Nie dotyczy
Dokumentacja Włączanie żądań między źródłami w internetowym interfejsie API 2 ASP.NET ASP.NET internetowego interfejsu API — obsługa mechanizmu CORS w internetowym interfejsie API 2 ASP.NET
Kroki

Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie jest nazywane zasadami tego samego źródła i uniemożliwia złośliwej witrynie odczytywanie poufnych danych z innej witryny. Czasami jednak może być konieczne bezpieczne uwidocznienie interfejsów API, z których mogą korzystać inne witryny. Współużytkowanie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego źródła.

Przy użyciu mechanizmu CORS serwer może jawnie zezwalać na niektóre żądania między źródłami podczas odrzucania innych. MECHANIZM CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP.

Przykład

W pliku App_Start/WebApiConfig.cs dodaj następujący kod do metody 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 }
            );
        }
    }
}

Przykład

Atrybut EnableCors można zastosować do metod akcji w kontrolerze w następujący sposób:

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

Należy pamiętać, że ważne jest, aby upewnić się, że lista źródeł w atrybucie EnableCors jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do interfejsu API bez żadnych ograniczeń, >co naraża interfejs API na ataki CSRF. Funkcja EnableCors może być ozdobiona na poziomie kontrolera.

Przykład

Aby wyłączyć mechanizm CORS dla określonej metody w klasie, można użyć atrybutu DisableCors, jak pokazano poniżej:

[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);
  }
}
Tytuł Szczegóły
Składnik Internetowy interfejs API
Faza SDL Tworzenie
Odpowiednie technologie MVC 6
Atrybuty Nie dotyczy
Dokumentacja Włączanie żądań między źródłami (CORS) w ASP.NET Core 1.0
Kroki

W ASP.NET Core 1.0 mechanizm CORS można włączyć za pomocą oprogramowania pośredniczącego lub mvC. W przypadku używania wzorca MVC do włączania mechanizmu CORS są używane te same usługi CORS, ale oprogramowanie pośredniczące CORS nie jest.

Metoda 1 Włączanie mechanizmu CORS z oprogramowaniem pośredniczącym: aby włączyć mechanizm CORS dla całej aplikacji, dodaj oprogramowanie pośredniczące CORS do potoku żądania przy użyciu metody rozszerzenia UseCors. Zasady między źródłami można określić podczas dodawania oprogramowania pośredniczącego CORS przy użyciu klasy CorsPolicyBuilder. Istnieją dwa sposoby wykonania tej czynności:

Przykład

Pierwszym z nich jest wywołanie metody UseCors z lambdą. Lambda przyjmuje obiekt CorsPolicyBuilder:

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

Przykład

Drugi to zdefiniowanie co najmniej jednej nazwanej zasady MECHANIZMU CORS, a następnie wybranie zasad według nazwy w czasie wykonywania.

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

Podejście 2 Włączanie mechanizmu CORS w mvC: deweloperzy mogą też użyć wzorca MVC do zastosowania określonych mechanizmów CORS na akcję, na kontroler lub globalnie dla wszystkich kontrolerów.

Przykład

Na akcję: Aby określić zasady CORS dla określonej akcji, dodaj atrybut [EnableCors] do akcji. Określ nazwę zasad.

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

Przykład

Na kontroler:

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

Przykład

Globalnie:

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

Należy pamiętać, że ważne jest, aby upewnić się, że lista źródeł w atrybucie EnableCors jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do interfejsu API bez żadnych ograniczeń, >co naraża interfejs API na ataki CSRF.

Przykład

Aby wyłączyć mechanizm CORS dla kontrolera lub akcji, użyj atrybutu [DisableCors].

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

Szyfrowanie sekcji plików konfiguracji internetowego interfejsu API zawierających poufne dane

Tytuł Szczegóły
Składnik Internetowy interfejs API
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Instrukcje: szyfrowanie sekcji konfiguracji w programie ASP.NET 2.0 przy użyciu interfejsu DPAPI, określanie chronionego dostawcy konfiguracji przy użyciu usługi Azure Key Vault do ochrony wpisów tajnych aplikacji
Kroki Pliki konfiguracji, takie jak Web.config, appsettings.json są często używane do przechowywania poufnych informacji, w tym nazw użytkowników, haseł, parametry połączenia bazy danych i kluczy szyfrowania. Jeśli te informacje nie są chronione, aplikacja jest podatna na ataki lub złośliwych użytkowników uzyskujących poufne informacje, takie jak nazwy użytkowników konta i hasła, nazwy baz danych i nazwy serwerów. Na podstawie typu wdrożenia (azure/on-prem) szyfruj poufne sekcje plików konfiguracji przy użyciu interfejsu DPAPI lub usług, takich jak Azure Key Vault.

Upewnij się, że wszystkie interfejsy administracyjne są zabezpieczone przy użyciu silnych poświadczeń

Tytuł Szczegóły
Składnik Urządzenie IoT
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki Wszystkie interfejsy administracyjne udostępniane przez bramę urządzenia lub pola powinny być zabezpieczone przy użyciu silnych poświadczeń. Ponadto wszystkie inne uwidocznione interfejsy, takie jak WiFi, SSH, udziały plików, FTP, powinny być zabezpieczone przy użyciu silnych poświadczeń. Nie należy używać domyślnych słabych haseł.

Upewnij się, że nieznany kod nie może zostać wykonany na urządzeniach

Tytuł Szczegóły
Składnik Urządzenie IoT
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Włączanie bezpiecznego rozruchu i szyfrowania urządzeń funkcją BitLocker w systemie Windows 10 IoT Core
Kroki Bezpieczny rozruch UEFI ogranicza system do zezwalania na wykonywanie plików binarnych podpisanych przez określony urząd. Ta funkcja uniemożliwia wykonywanie nieznanego kodu na platformie i potencjalnie osłabianie stanu zabezpieczeń. Włącz bezpieczny rozruch UEFI i ogranicz listę urzędów certyfikacji, które są zaufane do podpisywania kodu. Podpisz cały kod wdrożony na urządzeniu przy użyciu jednego z zaufanych urzędów.

Szyfrowanie systemu operacyjnego i innych partycji urządzenia IoT za pomocą funkcji BitLocker

Tytuł Szczegóły
Składnik Urządzenie IoT
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki System Windows 10 IoT Core implementuje uproszczoną wersję szyfrowania urządzeń funkcją BitLocker, która ma silną zależność od obecności modułu TPM na platformie, w tym niezbędnego protokołu preOS w interfejsie UEFI, który przeprowadza niezbędne pomiary. Te pomiary preOS zapewniają, że system operacyjny ma później ostateczny rekord sposobu uruchamiania systemu operacyjnego. Szyfruj partycje systemu operacyjnego przy użyciu funkcji BitLocker i innych partycji również w przypadku przechowywania poufnych danych.

Upewnij się, że na urządzeniach są włączone tylko minimalne usługi/funkcje

Tytuł Szczegóły
Składnik Urządzenie IoT
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki Nie włączaj ani nie wyłączaj żadnych funkcji ani usług w systemie operacyjnym, które nie są wymagane do działania rozwiązania. Jeśli na przykład urządzenie nie wymaga wdrożenia interfejsu użytkownika, zainstaluj system Windows IoT Core w trybie bezgłówkowym.

Szyfrowanie systemu operacyjnego i innych partycji bramy pola IoT za pomocą funkcji BitLocker

Tytuł Szczegóły
Składnik Brama pola IoT
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki System Windows 10 IoT Core implementuje uproszczoną wersję szyfrowania urządzeń funkcją BitLocker, która ma silną zależność od obecności modułu TPM na platformie, w tym niezbędnego protokołu preOS w interfejsie UEFI, który przeprowadza niezbędne pomiary. Te pomiary preOS zapewniają, że system operacyjny ma później ostateczny rekord sposobu uruchamiania systemu operacyjnego. Szyfruj partycje systemu operacyjnego przy użyciu funkcji BitLocker i innych partycji również w przypadku przechowywania poufnych danych.

Upewnij się, że domyślne poświadczenia logowania bramy pola zostały zmienione podczas instalacji

Tytuł Szczegóły
Składnik Brama pola IoT
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki Upewnij się, że domyślne poświadczenia logowania bramy pola zostały zmienione podczas instalacji

Upewnij się, że brama w chmurze implementuje proces, aby zapewnić aktualność oprogramowania układowego połączonych urządzeń

Tytuł Szczegóły
Składnik Brama chmury IoT
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Wybór bramy — Azure IoT Hub
Dokumentacja Omówienie usługi IoT Hub Zarządzanie urządzeniami,Samouczek dotyczący aktualizacji urządzenia dla usługi Azure IoT Hub przy użyciu obrazu referencyjnego urządzenia Raspberry Pi 3 B+.
Kroki LWM2M to protokół z Zarządzanie urządzeniami Open Mobile Alliance for IoT. Zarządzanie urządzeniami usługi Azure IoT umożliwia interakcję z urządzeniami fizycznymi przy użyciu zadań urządzeń. Upewnij się, że brama w chmurze implementuje proces, aby rutynowo przechowywać urządzenie i inne dane konfiguracji przy użyciu usługi Azure IoT Hub Zarządzanie urządzeniami.

Upewnij się, że urządzenia mają skonfigurowane mechanizmy zabezpieczeń punktu końcowego zgodnie z zasadami organizacji

Tytuł Szczegóły
Składnik Granica zaufania maszyny
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Nie dotyczy
Kroki Upewnij się, że urządzenia mają mechanizmy zabezpieczeń punktu końcowego, takie jak funkcja BitLocker na potrzeby szyfrowania na poziomie dysku, oprogramowanie antywirusowe ze zaktualizowanymi sygnaturami, zapora oparta na hoście, uaktualnienia systemu operacyjnego, zasady grupy itp. są konfigurowane zgodnie z zasadami zabezpieczeń organizacji.

Zapewnianie bezpiecznego zarządzania kluczami dostępu do usługi Azure Storage

Tytuł Szczegóły
Składnik Azure Storage
Faza SDL Wdrożenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Przewodnik po zabezpieczeniach usługi Azure Storage — zarządzanie kluczami konta magazynu
Kroki

Magazyn kluczy: zaleca się przechowywanie kluczy dostępu usługi Azure Storage w usłudze Azure Key Vault jako wpisu tajnego i pobranie klucza z magazynu kluczy przez aplikacje. Jest to zalecane z następujących powodów:

  • Aplikacja nigdy nie będzie mieć klucza magazynu zakodowanego na stałe w pliku konfiguracji, który usuwa ten sposób uzyskiwania dostępu do kluczy bez określonych uprawnień
  • Dostęp do kluczy można kontrolować przy użyciu identyfikatora Entra firmy Microsoft. Oznacza to, że właściciel konta może udzielić dostępu do kilku aplikacji, które muszą pobrać klucze z usługi Azure Key Vault. Inne aplikacje nie będą mogły uzyskać dostępu do kluczy bez udzielania im uprawnień
  • Regenerowanie klucza: zaleca się przeprowadzenie procesu ponownego generowania kluczy dostępu do usługi Azure Storage ze względów bezpieczeństwa. Szczegółowe informacje na temat tego, dlaczego i jak zaplanować regenerowanie kluczy, opisano w artykule Azure Storage Security Guide reference (Przewodnik zabezpieczeń usługi Azure Storage)

Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w usłudze Azure Storage

Tytuł Szczegóły
Składnik Azure Storage
Faza SDL Tworzenie
Odpowiednie technologie Ogólna
Atrybuty Nie dotyczy
Dokumentacja Pomoc techniczna dotycząca mechanizmu CORS dla usług Azure Storage
Kroki Usługa Azure Storage umożliwia włączenie mechanizmu CORS — współużytkowania zasobów między źródłami. Dla każdego konta magazynu można określić domeny, które mogą uzyskiwać dostęp do zasobów na tym koncie magazynu. Domyślnie mechanizm CORS jest wyłączony we wszystkich usługach. Mechanizm CORS można włączyć przy użyciu interfejsu API REST lub biblioteki klienta magazynu w celu wywołania jednej z metod ustawiania zasad usługi.

Włączanie funkcji ograniczania usługi WCF

Tytuł Szczegóły
Składnik WCF
Faza SDL Tworzenie
Odpowiednie technologie .NET Framework 3
Atrybuty Nie dotyczy
Dokumentacja MSDN, Fortify Kingdom
Kroki

Nie kładąc limitu użycia zasobów systemowych, mogą spowodować wyczerpanie zasobów i ostatecznie odmowę usługi.

  • WYJAŚNIENIE: Program Windows Communication Foundation (WCF) oferuje możliwość ograniczania żądań obsługi. Zezwolenie na zbyt wiele żądań klientów może zalać system i wyczerpać jego zasoby. Z drugiej strony zezwolenie tylko na niewielką liczbę żądań do usługi może uniemożliwić uprawnionym użytkownikom korzystanie z usługi. Każda usługa powinna być indywidualnie dostrojona do i skonfigurowana w celu umożliwienia odpowiedniej ilości zasobów.
  • ZALECENIA Włącz funkcję ograniczania przepustowości usługi WCF i ustaw limity odpowiednie dla aplikacji.

Przykład

Poniżej przedstawiono przykładową konfigurację z włączonym ograniczaniem przepustowości:

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

Ujawnienie informacji w programie WCF za pośrednictwem metadanych

Tytuł Szczegóły
Składnik WCF
Faza SDL Tworzenie
Odpowiednie technologie .NET Framework 3
Atrybuty Nie dotyczy
Dokumentacja MSDN, Fortify Kingdom
Kroki Metadane mogą pomóc osobom atakującym poznać system i zaplanować formę ataku. Usługi WCF można skonfigurować pod kątem uwidaczniania metadanych. Metadane zawierają szczegółowe informacje o opisie usługi i nie powinny być emitowane w środowiskach produkcyjnych. HttpGetEnabled / HttpsGetEnabled Właściwości klasy ServiceMetaData określają, czy usługa uwidacznia metadane

Przykład

Poniższy kod instruuje program WCF, aby rozgłaszał metadane usługi

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

Nie emituj metadanych usługi w środowisku produkcyjnym. Ustaw właściwości HttpGetEnabled/ HttpsGetEnabled klasy ServiceMetaData na false.

Przykład

Poniższy kod instruuje program WCF, aby nie emitował metadanych usługi.

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