Güvenlik Çerçevesi: Yapılandırma Yönetimi | Azaltıcı etken

Ürün/Hizmet Makale
Web Uygulaması
Veritabanı
Web API'si
IoT Cihazı
IoT Alan Ağ Geçidi
IoT Cloud Gateway
Makine Güven Sınırı
Azure Depolama
WCF

İçerik Güvenlik İlkesi (CSP) uygulama ve satır içi JavaScript'i devre dışı bırakma

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular İçerik Güvenliği İlkesine Giriş, İçerik Güvenlik İlkesi Başvurusu, İçerik güvenliği ilkesine giriş, CSP'yi kullanabilir miyim?
Adımlar

İçerik Güvenliği İlkesi (CSP), web uygulaması sahiplerinin sitelerine eklenmiş içerik üzerinde denetim sahibi olmasını sağlayan bir W3C standardı olan derinlemesine savunma güvenlik mekanizmasıdır. CSP, web sunucusuna HTTP yanıt üst bilgisi olarak eklenir ve istemci tarafında tarayıcılar tarafından zorlanır. İzin verilen liste tabanlı bir ilkedir. Web sitesi, JavaScript gibi etkin içeriğin yüklenebileceği bir dizi güvenilen etki alanı bildirebilir.

CSP aşağıdaki güvenlik avantajlarını sağlar:

  • XSS'ye karşı koruma: Bir sayfa XSS'ye karşı savunmasızsa, saldırgan bu sayfadan iki şekilde yararlanabilir:
    • öğesini ekleme <script>malicious code</script>. CsP'nin Temel Kısıtlaması-1 nedeniyle bu açık çalışmayacak
    • öğesini ekleme <script src="http://attacker.com/maliciousCode.js"/>. Saldırgan tarafından denetlenen etki alanı CSP'nin izin verilen etki alanları listesinde olmadığından bu açıklardan yararlanma çalışmaz
  • Veri sızdırma denetimi: Web sayfasındaki kötü amaçlı içeriklerden herhangi biri dış web sitesine bağlanmaya ve verileri çalmaya çalışırsa, bağlantı CSP tarafından durdurulacaktır. Bunun nedeni hedef etki alanının CSP'nin izin verilenler listesinde olmamasıdır
  • Tıklama jakına karşı savunma: Tıklama jakı, bir saldırganın orijinal bir web sitesini çerçevelediği ve kullanıcıları kullanıcı arabirimi öğelerine tıklamaya zorlayabildiği bir saldırı tekniğidir. Şu anda tıklama jakına karşı savunma, bir yanıt üst bilgisi - X-Frame-Options yapılandırılarak elde edilir. Tüm tarayıcılar bu üst bilgiyi dikkate almaz ve bundan sonra CSP tıklama jakına karşı savunmak için standart bir yol olacaktır
  • Gerçek zamanlı saldırı raporlama: CSP özellikli bir web sitesinde ekleme saldırısı varsa, tarayıcılar web sunucusunda yapılandırılmış bir uç noktaya otomatik olarak bir bildirim tetikler. Bu şekilde CSP, gerçek zamanlı bir uyarı sistemi görevi görür.

Örnek

Örnek ilke:

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

Bu ilke, betiklerin yalnızca web uygulamasının sunucusundan ve google analytics sunucusundan yüklenmesine olanak tanır. Başka bir siteden yüklenen betikler reddedilir. Bir web sitesinde CSP etkinleştirildiğinde, XSS saldırılarını azaltmak için aşağıdaki özellikler otomatik olarak devre dışı bırakılır.

Örnek

Satır içi betikler yürütülmeyecek. Aşağıda satır içi betik örnekleri verilmiştir

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

Örnek

Dizeler kod olarak değerlendirilmez.

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

Tarayıcının XSS filtresini etkinleştirme

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular XSS Koruma Filtresi
Adımlar

X-XSS-Protection yanıt üst bilgisi yapılandırması, tarayıcının siteler arası betik filtresini denetler. Bu yanıt üst bilgisi aşağıdaki değerlere sahip olabilir:

  • 0: Bu işlem filtreyi devre dışı bırakır
  • 1: Filter enabled Siteler arası betik saldırısı algılanırsa, saldırıyı durdurmak için tarayıcı sayfayı temizler
  • 1: mode=block : Filter enabled. Sayfayı temizleme yerine, bir XSS saldırısı algılandığında tarayıcı sayfanın işlenmesini engeller
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Tarayıcı sayfayı temizleyecek ve ihlali bildirecektir.

Bu, ayrıntıları seçtiğiniz bir URI'ye göndermek için CSP ihlal raporlarını kullanan bir Chromium işlevidir. Son iki seçenek güvenli değerler olarak kabul edilir.

ASP.NET uygulamaların dağıtımdan önce izlemeyi ve hata ayıklamayı devre dışı bırakması gerekir

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular ASP.NET Hata Ayıklamaya Genel Bakış, ASP.NET İzlemeye Genel Bakış, Nasıl yapılır: ASP.NET Bir Uygulama için İzlemeyi Etkinleştirme, Nasıl yapılır: ASP.NET Uygulamalar için Hata Ayıklamayı Etkinleştirme
Adımlar sayfa için izleme etkinleştirildiğinde, isteyen her tarayıcı iç sunucu durumu ve iş akışı hakkındaki verileri içeren izleme bilgilerini de alır. Bu bilgiler güvenliğe duyarlı olabilir. Sayfa için hata ayıklama etkinleştirildiğinde, sunucuda oluşan hatalar tarayıcıya sunulan tam yığın izleme verileriyle sonuçlanır. Bu veriler sunucunun iş akışıyla ilgili güvenlik duyarlı bilgileri kullanıma sunabilir.

Yalnızca güvenilen kaynaklardan üçüncü taraf JavaScript'lere erişme

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Üçüncü taraf JavaScript'lere yalnızca güvenilir kaynaklardan başvurulmalıdır. Başvuru uç noktaları her zaman TLS'de olmalıdır.

Kimliği doğrulanmış ASP.NET sayfalarının kullanıcı arabirimi yeniden oluşturma veya tıklamayla giriş savunması içerdiğini emin olun

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular OWASP tıkla-çekme Savunma Bilgi Sayfası, Internet Explorer Internals - X-Frame-Options ile tıklama jacking ile mücadele
Adımlar

"UI yeniden giriş saldırısı" olarak da bilinen tıklama jakı, bir saldırganın üst düzey sayfaya tıklamayı amaçladığında kullanıcıyı başka bir sayfadaki bir düğmeye veya bağlantıya tıklaması için kandırmak için birden çok saydam veya opak katman kullanmasıdır.

Bu katmanlama, kurbanın sayfasını yükleyen bir iframe ile kötü amaçlı bir sayfa oluşturarak elde edilir. Bu nedenle, saldırgan kendi sayfası için yapılan tıklamaları "ele geçirerek" büyük olasılıkla başka bir uygulamaya, etki alanına veya her ikisine de ait olan başka bir sayfaya yönlendiriyor. Tıklama jacking saldırılarını önlemek için, tarayıcıya diğer etki alanlarından çerçeve oluşturma izni vermemesini belirten uygun X-Frame-Options HTTP yanıt üst bilgilerini ayarlayın

Örnek

X-FRAME-OPTIONS üst bilgisi IIS web.config aracılığıyla ayarlanabilir. Hiçbir zaman çerçevelendirilmemesi gereken siteler için Web.config kod parçacığı:

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

Örnek

Yalnızca aynı etki alanındaki sayfalara göre çerçevelenmesi gereken siteler için Web.config kodu:

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

ASP.NET Web Uygulamalarında CORS etkinleştirildiğinde yalnızca güvenilen kaynaklara izin verildiğinden emin olun

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları, MVC5
Öznitelikler Yok
Başvurular Yok
Adımlar

Tarayıcı güvenliği, bir web sitesinin başka bir etki alanına AJAX istekleri göndermesini engeller. Bu kısıtlama aynı kaynak ilkesi olarak adlandırılır ve kötü amaçlı bir sitenin başka bir siteden hassas verileri okumasını önler. Ancak, bazen diğer sitelerin kullanabileceği API'leri güvenli bir şekilde kullanıma sunmanız gerekebilir. Çıkış Noktaları Arası Kaynak Paylaşımı (CORS), bir sunucunun aynı kaynak ilkesini gevşetmesini sağlayan bir W3C standardıdır. BIR sunucu CORS kullanarak bazı çıkış noktaları arası isteklere izin verirken diğerlerini reddedebilir.

CORS, JSONP gibi önceki tekniklerden daha güvenli ve esnektir. CorS'nin etkinleştirilmesi, temel olarak web uygulamasına birkaç HTTP yanıt üst bilgisi (Access-Control-*) eklemeye çevrilir ve bu işlem birkaç yolla yapılabilir.

Örnek

Web.config erişimi varsa CORS aşağıdaki kod aracılığıyla eklenebilir:

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

Örnek

web.config'e erişim kullanılamıyorsa CORS aşağıdaki C# kodu eklenerek yapılandırılabilir:

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

"Access-Control-Allow-Origin" özniteliğindeki kaynak listesinin sonlu ve güvenilen bir kaynak kümesine ayarlandığından emin olun. Bunu uygun olmayan bir şekilde yapılandırmamak (örneğin, değeri '*' olarak ayarlamak), kötü amaçlı sitelerin herhangi bir kısıtlama olmadan web uygulamasına >çıkış noktaları arası istekleri tetiklesine olanak tanıyarak uygulamayı CSRF saldırılarına karşı savunmasız hale getirir.

ASP.NET Sayfalarında ValidateRequest özniteliğini etkinleştirme

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları, MVC5
Öznitelikler Yok
Başvurular İstek Doğrulama - Betik Saldırılarını Önleme
Adımlar

Sürüm 1.1'den beri ASP.NET özelliği olan istek doğrulaması, sunucunun kodlanmamış HTML içeren içeriği kabul etmesini engeller. Bu özellik, istemci betik kodunun veya HTML'nin bilmeden sunucuya gönderilebildiği, depolanabildiği ve ardından diğer kullanıcılara sunulabildiği bazı betik ekleme saldırılarını engellemeye yardımcı olmak için tasarlanmıştır. Yine de tüm giriş verilerini doğrulamanızı ve uygun olduğunda HTML'yi kodlamanızı kesinlikle öneririz.

İstek doğrulaması, tüm giriş verileri tehlikeli olabilecek değerler listesiyle karşılaştırılarak gerçekleştirilir. Bir eşleşme oluşursa, ASP.NET bir HttpRequestValidationExceptionoluşturur. Varsayılan olarak İstek Doğrulama özelliği etkindir.

Örnek

Ancak, bu özellik sayfa düzeyinde devre dışı bırakılabilir:

<%@ Page validateRequest="false" %> 

veya uygulama düzeyinde

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

İstek Doğrulama özelliğinin desteklenmediğini ve MVC6 işlem hattının parçası olmadığını unutmayın.

JavaScript kitaplıklarının yerel olarak barındırılan en son sürümlerini kullanma

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar

jQuery gibi standart JavaScript kitaplıklarını kullanan geliştiricilerin bilinen güvenlik açıkları içermeyen yaygın JavaScript kitaplıklarının onaylı sürümlerini kullanması gerekir. Eski sürümlerinde bilinen güvenlik açıkları için güvenlik düzeltmeleri içerdiğinden kitaplıkların en son sürümünü kullanmak iyi bir uygulamadır.

Uyumluluk nedeniyle en son sürüm kullanılamıyorsa, aşağıdaki en düşük sürümler kullanılmalıdır.

Kabul edilebilir en düşük sürümler:

  • jQuery (İngilizce)
    • jQuery 1.7.1
    • jQueryUI 1.10.0
    • jQuery Doğrulama 1.9
    • jQuery Mobil 1.0.1
    • jQuery Döngüsü 2.99
    • jQuery Veri Tabloları 1.9.0
  • AJAX Denetim Araç Seti
    • Ajax Denetim Araç Seti 40412
  • web formlarını ve Ajax'ı ASP.NET
    • ASP.NET Web Forms ve Ajax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Genel CDN'ler gibi dış sitelerden hiçbir JavaScript kitaplığını yüklemeyin

Otomatik MIME algılamayı devre dışı bırakma

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular IE8 Güvenlik Bölümü V: Kapsamlı Koruma, MIME türü
Adımlar X-Content-Type-Options üst bilgisi, geliştiricilerin içeriklerinin MIME koklamaması gerektiğini belirtmesine olanak tanıyan bir HTTP üst bilgisidir. Bu üst bilgi, MIME Algılama saldırılarını azaltmak için tasarlanmıştır. Kullanıcı tarafından denetlenebilir içerik içerebilen her sayfa için HTTP Üst Bilgisi X-Content-Type-Options:nosniff kullanmanız gerekir. Uygulamadaki tüm sayfalarda gerekli üst bilgiyi genel olarak etkinleştirmek için aşağıdakilerden birini yapabilirsiniz

Örnek

Uygulama Internet Information Services (IIS) 7 tarafından barındırılıyorsa web.config dosyasına üst bilgiyi ekleyin.

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

Örnek

Üst bilgiyi genel Application_BeginRequest ekleme

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

Örnek

Özel HTTP modülü uygulama

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

Örnek

Gerekli üst bilgiyi tek tek yanıtlara ekleyerek yalnızca belirli sayfalar için etkinleştirebilirsiniz:

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

Parmak izi kullanmaktan kaçınmak için Windows Azure Web Sitelerinde standart sunucu üst bilgilerini kaldırma

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler OrtamTürü - Azure
Başvurular Windows Azure Web Sitelerinde standart sunucu üst bilgilerini kaldırma
Adımlar Sunucu, X-Powered-By, X-AspNet-Version gibi üst bilgiler sunucu ve temel teknolojiler hakkındaki bilgileri gösterir. Bu üst bilgilerin gizlenmesi ve böylece uygulamanın parmak izinin alınmasının engellenmesi önerilir

Veritabanı Altyapısı Erişimi için Windows Güvenlik Duvarı Yapılandırma

Başlık Ayrıntılar
Bileşen Veritabanı
SDL Aşaması Derleme
Geçerli Teknolojiler SQL Azure, Şirket İçi
Öznitelikler Yok, SQL Sürümü - V12
Başvurular Azure SQL Veritabanı güvenlik duvarı yapılandırma, Veritabanı Altyapısı Erişimi için Windows Güvenlik Duvarı Yapılandırma
Adımlar Güvenlik duvarı sistemleri bilgisayar kaynaklarına yetkisiz erişimi önlemeye yardımcı olur. Sql Server Veritabanı Altyapısı örneğine bir güvenlik duvarı üzerinden erişmek için, SQL Server çalıştıran bilgisayarda güvenlik duvarını erişime izin verecek şekilde yapılandırmanız gerekir

ASP.NET Web API'sinde CORS etkinleştirildiğinde yalnızca güvenilen kaynaklara izin verildiğinden emin olun

Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Derleme
Geçerli Teknolojiler MVC 5 (MVC)
Öznitelikler Yok
Başvurular ASP.NET Web API 2, ASP.NET Web API'sinde Çıkış Noktaları Arası İstekleri Etkinleştirme - ASP.NET Web API 2'de CORS Desteği
Adımlar

Tarayıcı güvenliği, bir web sitesinin başka bir etki alanına AJAX istekleri göndermesini engeller. Bu kısıtlama aynı kaynak ilkesi olarak adlandırılır ve kötü amaçlı bir sitenin başka bir siteden hassas verileri okumasını önler. Ancak, bazen diğer sitelerin kullanabileceği API'leri güvenli bir şekilde kullanıma sunmanız gerekebilir. Çıkış Noktaları Arası Kaynak Paylaşımı (CORS), bir sunucunun aynı kaynak ilkesini gevşetmesini sağlayan bir W3C standardıdır.

BIR sunucu CORS kullanarak bazı çıkış noktaları arası isteklere izin verirken diğerlerini reddedebilir. CORS, JSONP gibi önceki tekniklerden daha güvenli ve esnektir.

Örnek

App_Start/WebApiConfig.cs WebApiConfig.Register yöntemine aşağıdaki kodu ekleyin

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

Örnek

EnableCors özniteliği bir denetleyicideki eylem yöntemlerine aşağıdaki gibi uygulanabilir:

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

EnableCors özniteliğindeki kaynak listesinin sonlu ve güvenilen bir kaynak kümesine ayarlandığından emin olun. Bunu uygunsuz bir şekilde yapılandırmamak (örneğin, değeri '*' olarak ayarlamak), kötü amaçlı sitelerin herhangi bir kısıtlama >olmadan API'ye çıkış noktaları arası istekleri tetikleebilmesine olanak tanıyarak API'yi CSRF saldırılarına karşı savunmasız hale getirir. EnableCors denetleyici düzeyinde dekore edilebilir.

Örnek

Bir sınıftaki belirli bir yöntemde CORS'yi devre dışı bırakmak için DisableCors özniteliği aşağıda gösterildiği gibi kullanılabilir:

[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);
  }
}
Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Derleme
Geçerli Teknolojiler MVC 6
Öznitelikler Yok
Başvurular ASP.NET Core 1.0'da Çıkış Noktaları Arası İstekleri (CORS) Etkinleştirme
Adımlar

ASP.NET Core 1.0'da CORS ara yazılım veya MVC kullanılarak etkinleştirilebilir. CORS'yi etkinleştirmek için MVC kullanılırken aynı CORS hizmetleri kullanılır, ancak CORS ara yazılımı kullanılmaz.

Yaklaşım-1 Ara yazılım ile CORS'yi etkinleştirme: CorS'yi uygulamanın tamamında etkinleştirmek için UseCors uzantısı yöntemini kullanarak CORS ara yazılımını istek işlem hattına ekleyin. CorsPolicyBuilder sınıfı kullanılarak CORS ara yazılımı eklenirken çıkış noktaları arası bir ilke belirtilebilir. Bunu yapmak için iki yol vardır:

Örnek

İlki UseCors'u lambda ile çağırmaktır. Lambda bir CorsPolicyBuilder nesnesi alır:

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

Örnek

İkincisi, bir veya daha fazla adlandırılmış CORS ilkesi tanımlamak ve ardından çalışma zamanında ilkeyi ada göre seçmektir.

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

Yaklaşım-2 MVC'de CORS'yi etkinleştirme: Geliştiriciler alternatif olarak MVC'yi kullanarak eylem başına, denetleyici başına veya tüm denetleyiciler için genel olarak belirli CORS'yi uygulayabilir.

Örnek

Eylem başına: Belirli bir eylem için bir CORS ilkesi belirtmek için eyleme [EnableCors] özniteliğini ekleyin. İlke adını belirtin.

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

Örnek

Denetleyici başına:

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

Örnek

Genel:

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

EnableCors özniteliğindeki kaynak listesinin sonlu ve güvenilen bir kaynak kümesine ayarlandığından emin olun. Bunu uygunsuz bir şekilde yapılandırmamak (örneğin, değeri '*' olarak ayarlamak), kötü amaçlı sitelerin herhangi bir kısıtlama >olmadan API'ye çıkış noktaları arası istekleri tetikleebilmesine olanak tanıyarak API'yi CSRF saldırılarına karşı savunmasız hale getirir.

Örnek

Bir denetleyici veya eylem için CORS'yi devre dışı bırakmak için [DisableCors] özniteliğini kullanın.

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

Web API'sinin yapılandırma dosyalarının hassas veriler içeren bölümlerini şifreleme

Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Nasıl Yapılır: ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme DPAPI Kullanarak, Korumalı Yapılandırma Sağlayıcısı Belirtme, Uygulama gizli dizilerini korumak için Azure Key Vault Kullanma
Adımlar Web.config, appsettings.json gibi yapılandırma dosyaları genellikle kullanıcı adları, parolalar, veritabanı bağlantı dizesi ve şifreleme anahtarları gibi hassas bilgileri tutmak için kullanılır. Bu bilgileri korumazsanız, uygulamanız hesap kullanıcı adları ve parolaları, veritabanı adları ve sunucu adları gibi hassas bilgileri alan saldırganlara veya kötü amaçlı kullanıcılara karşı savunmasızdır. Dağıtım türüne (azure/şirket içi) bağlı olarak, DPAPI veya Azure Key Vault gibi hizmetleri kullanarak yapılandırma dosyalarının hassas bölümlerini şifreleyin.

Tüm yönetici arabirimlerinin güçlü kimlik bilgileriyle güvenli olduğundan emin olun

Başlık Ayrıntılar
Bileşen IoT Cihazı
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Cihaz veya alan ağ geçidinin kullanıma sağladığı tüm yönetim arabirimleri güçlü kimlik bilgileri kullanılarak güvenli hale getirilmelidir. Ayrıca WiFi, SSH, Dosya paylaşımları, FTP gibi diğer tüm kullanıma sunulan arabirimler güçlü kimlik bilgileriyle güvenli hale getirilmelidir. Varsayılan zayıf parolalar kullanılmamalıdır.

Bilinmeyen kodun cihazlarda yürütülemediğine emin olun

Başlık Ayrıntılar
Bileşen IoT Cihazı
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Windows 10 IoT Core'da Güvenli Önyükleme ve BitLocker Cihaz Şifrelemesini Etkinleştirme
Adımlar UEFI Güvenli Önyükleme, sistemi yalnızca belirtilen bir yetkili tarafından imzalanan ikili dosyaların yürütülmesine izin verecek şekilde kısıtlar. Bu özellik bilinmeyen kodun platformda yürütülmesini engeller ve bunun güvenlik duruşunu zayıflatma olasılığı vardır. UEFI Güvenli Önyükleme'yi etkinleştirin ve imzalama kodu için güvenilen sertifika yetkililerinin listesini kısıtlayın. Güvenilir yetkililerden birini kullanarak cihazda dağıtılan tüm kodları imzalayın.

İşletim sistemini ve IoT Cihazının diğer bölümlerini BitLocker ile şifreleme

Başlık Ayrıntılar
Bileşen IoT Cihazı
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Windows 10 IoT Core, UEFI'de gerekli ölçümleri yapan gerekli preOS protokolü de dahil olmak üzere platformda tpm bulunmasına güçlü bir bağımlılığı olan basit bir BitLocker Cihaz Şifrelemesi sürümünü uygular. Bu preOS ölçümleri, işletim sisteminin daha sonra işletim sisteminin nasıl başlatıldığına ilişkin kesin bir kayda sahip olmasını sağlar. BitLocker'ı ve diğer tüm bölümleri kullanarak işletim sistemi bölümlerini şifrelemek için hassas verileri depolayın.

Cihazlarda yalnızca en düşük hizmetlerin/özelliklerin etkinleştirildiğinden emin olun

Başlık Ayrıntılar
Bileşen IoT Cihazı
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar İşletim sistemindeki çözümün çalışması için gerekli olmayan özellikleri veya hizmetleri etkinleştirmeyin veya kapatmayın. Örneğin, cihazın dağıtılması için bir kullanıcı arabirimi gerekmiyorsa Windows IoT Core'u başsız modda yükleyin.

İşletim sistemini ve IoT Alan Ağ Geçidi'nin diğer bölümlerini BitLocker ile şifreleme

Başlık Ayrıntılar
Bileşen IoT Alan Ağ Geçidi
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Windows 10 IoT Core, UEFI'de gerekli ölçümleri yapan gerekli preOS protokolü de dahil olmak üzere platformda tpm bulunmasına güçlü bir bağımlılığı olan basit bir BitLocker Cihaz Şifrelemesi sürümünü uygular. Bu preOS ölçümleri, işletim sisteminin daha sonra işletim sisteminin nasıl başlatıldığına ilişkin kesin bir kayda sahip olmasını sağlar. BitLocker'ı ve diğer tüm bölümleri kullanarak işletim sistemi bölümlerini şifrelemek için hassas verileri depolayın.

Yükleme sırasında alan ağ geçidinin varsayılan oturum açma kimlik bilgilerinin değiştirildiğinden emin olun

Başlık Ayrıntılar
Bileşen IoT Alan Ağ Geçidi
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Yükleme sırasında alan ağ geçidinin varsayılan oturum açma kimlik bilgilerinin değiştirildiğinden emin olun

Cloud Gateway'in bağlı cihaz üretici yazılımını güncel tutmaya yönelik bir işlem uyguladığından emin olun

Başlık Ayrıntılar
Bileşen IoT Cloud Gateway
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Ağ geçidi seçimi - Azure IoT Hub
Başvurular IoT Hub Cihaz Yönetimi Genel Bakış,Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub için Cihaz Güncelleştirmesi öğreticisi.
Adımlar LWM2M, IoT için Open Mobile Alliance Cihaz Yönetimi bir protokoldür. Azure IoT cihaz yönetimi, cihaz işlerini kullanarak fiziksel cihazlarla etkileşim kurmanızı sağlar. Cloud Gateway'in Azure IoT Hub Cihaz Yönetimi kullanarak cihazı ve diğer yapılandırma verilerini düzenli olarak güncel tutmaya yönelik bir işlem uyguladığından emin olun.

Cihazların kuruluş ilkelerine göre yapılandırılmış son nokta güvenlik denetimlerine sahip olduğundan emin olun

Başlık Ayrıntılar
Bileşen Makine Güven Sınırı
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Cihazların disk düzeyinde şifreleme için BitLocker, güncelleştirilmiş imzalarla virüsten koruma, konak tabanlı güvenlik duvarı, işletim sistemi yükseltmeleri, grup ilkeleri vb. gibi uç nokta güvenlik denetimlerinin kuruluş güvenlik ilkelerine göre yapılandırıldığından emin olun.

Azure depolama erişim anahtarlarının güvenli yönetimini sağlama

Başlık Ayrıntılar
Bileşen Azure Depolama
SDL Aşaması Dağıtım
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Azure Depolama güvenlik kılavuzu - Depolama Hesabı Anahtarlarınızı Yönetme
Adımlar

Anahtar Depolama: Azure Depolama erişim anahtarlarının Azure Key Vault'ta gizli dizi olarak depolanması ve uygulamaların anahtarı anahtar kasasından alması önerilir. Bu, aşağıdaki nedenlerden dolayı önerilir:

  • Uygulama hiçbir zaman bir yapılandırma dosyasında sabit kodlanmış depolama anahtarına sahip olmayacaktır ve bu da belirli bir izin olmadan anahtarlara erişen birinin bulunduğu yolu kaldırır
  • Anahtarlara erişim Microsoft Entra Id kullanılarak denetlenebilir. Bu, hesap sahibinin Anahtarları Azure Key Vault'tan alması gereken birkaç uygulamaya erişim izni verebileceği anlamına gelir. Diğer uygulamalar özel olarak izin vermeden anahtarlara erişemez
  • Anahtar Yeniden Oluşturma: Güvenlik nedeniyle Azure depolama erişim anahtarlarını yeniden oluşturmak için bir işlemin gerçekleşmesi önerilir. Anahtar yeniden oluşturmanın neden ve nasıl planlandığına ilişkin ayrıntılar Azure Depolama Güvenlik Kılavuzu başvuru makalesinde belgelenmiştir

Azure depolamada CORS etkinleştirildiğinde yalnızca güvenilen kaynaklara izin verildiğinden emin olun

Başlık Ayrıntılar
Bileşen Azure Depolama
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Azure Depolama Hizmetleri için CORS Desteği
Adımlar Azure Depolama, CORS – Çıkış Noktaları Arası Kaynak Paylaşımı'nı etkinleştirmenize olanak tanır. Her depolama hesabı için, bu depolama hesabındaki kaynaklara erişebilecek etki alanlarını belirtebilirsiniz. Varsayılan olarak, CORS tüm hizmetlerde devre dışıdır. HIZMET ilkelerini ayarlama yöntemlerinden birini çağırmak için REST API'yi veya depolama istemci kitaplığını kullanarak CORS'yi etkinleştirebilirsiniz.

WCF'nin hizmet azaltma özelliğini etkinleştirme

Başlık Ayrıntılar
Bileşen WCF
SDL Aşaması Derleme
Geçerli Teknolojiler .NET Framework 3
Öznitelikler Yok
Başvurular MSDN, Fortify Kingdom
Adımlar

Sistem kaynaklarının kullanımına bir sınır getirilmemesi, kaynak tükenmesine ve sonuçta hizmet reddine neden olabilir.

  • AÇIKLAMA: Windows Communication Foundation (WCF), hizmet isteklerini kısıtlama olanağı sunar. Çok fazla istemci isteğine izin vermek bir sistemi basabilir ve kaynaklarını tüketebilir. Öte yandan, bir hizmete yalnızca az sayıda isteğe izin vermek, meşru kullanıcıların hizmeti kullanmasını engelleyebilir. Her hizmet, uygun miktarda kaynağa izin verecek şekilde ayrı ayrı ayarlanmalıdır ve yapılandırılmalıdır.
  • ÖNERİLER WCF'nin hizmet azaltma özelliğini etkinleştirin ve uygulamanız için uygun sınırlar ayarlayın.

Örnek

Aşağıda azaltmanın etkinleştirildiği örnek bir yapılandırma verilmiştir:

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

WCF-Bilgilerin meta veriler aracılığıyla açığa çıkması

Başlık Ayrıntılar
Bileşen WCF
SDL Aşaması Derleme
Geçerli Teknolojiler .NET Framework 3
Öznitelikler Yok
Başvurular MSDN, Fortify Kingdom
Adımlar Meta veriler, saldırganların sistem hakkında bilgi edinmelerine ve bir saldırı biçimi planlamalarına yardımcı olabilir. WCF hizmetleri meta verileri kullanıma sunacak şekilde yapılandırılabilir. Meta veriler ayrıntılı hizmet açıklaması bilgileri verir ve üretim ortamlarında yayınlanmamalıdır. HttpGetEnabled / HttpsGetEnabled ServiceMetaData sınıfının özellikleri, bir hizmetin meta verileri kullanıma sununup sunmayacağını tanımlar

Örnek

Aşağıdaki kod, WCF'ye bir hizmetin meta verilerini yayınlamasını bildirir

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

Hizmet meta verilerini üretim ortamında yayınlamayın. ServiceMetaData sınıfının HttpGetEnabled / HttpsGetEnabled özelliklerini false olarak ayarlayın.

Örnek

Aşağıdaki kod, WCF'ye bir hizmetin meta verilerini yayınlamamasını bildirir.

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