Asp.Net Core Uygulamalarında Http Security Headers ile Güvenliği Artırmak

Hakan Karabulut
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readApr 18, 2020

Merhaba, bu makalede Security Header’lar hakkında bilgilendirme yapıp, dotnet projesinde uygulanmasını inceleyeceğim.

Browser üzerinden web sitesine giriş yapıldığında Http request ve response bilgilerini içeren header’lar devreye girer. Temel olarak Http Security Header, sitenizin içeriği hakkında bilgileri browser’a bildirerek browser’ın nasıl davranması gerektiğini yönlendirir.

www.google.com üzerine istek yapıldığında Headers

Http Security Header’ları ekleyerek daha güvenlikli bir alt yapı oluşturabiliriz.

Modern browser’ların desteklediği Security Header’lar şunlardır;

1- HTTP Strict Transport Security (HSTS)

Http request Https response olarak dönüşü

HSTS, bir kullanıcının browser üzerinden yaptığı HTTP request’ini otomatik olarak HTTPS’e dönüştürür.

2- X-Frame-Options

Bu konu Clickjacking olarak isimlendirilen, iframe içerisinde sitenizi çağırıp kullanıcıya tıklama yaptırarak, saldırganın istediği aktiviteyi kullanıcıya yaptırması durumudur. X-Frame-Options’ın 3 farklı parametresi bulunmaktadır.

Deny = Sayfanın herhangi bir frame içerisinde çağırılmasını tamamiyle engellemek için kullanılır.

SAMEORIGIN = Kendi domainizden başka herhangi bir domainin frame içerisinde çağırmasını engellemek için kullanılır.

ALLOW-FROM uri : Bu özellik sadece özel belirlenmiş URL’lerden (örneğin; https://example.com) sadece frame yapılmasına izin vermek için kullanılır.

Dotnet core kullanımı;

3- X-XSS-Protection

Sitenizi XSS(Cross-Site-Scripting) saldırılarından korumak için sunucu tarafında bazı header bilgileri response header’a eklenir. Elbette ki öncelik XSS zaafiyetlerini uygulama üzerinden yaptıktan sonra ekstra önlem olarak kullanılmalıdır.

Dotnet core kullanımı;

4- X-Content-Type-Options

Browser’lar web uygulaması tarafında sunulan içerik üzerinde MIME Type Sniffing adı verilen dosya tününü bitlerini okuyarak analizi gerçekleştirip içeriğin tipine karar vermeye çalışmaktadır.

Bir örnek ile durumu daha anlamaya çalışalım: Uzantısı jpeg olan ama içeriği text/html olan bir dosyayı düşündüğümüzde, upload modülünde ki korumalar uzantı ile aşılarak dosyanın yüklenmesi başarıyla sağlanır. Yüklenen dosya URL üzerinden çağırıldığında MIME Type sniffing sonuç olarak text/html döndürecek ve içeriği HTML olarak render edecektir. Böylece web sitenizde XSS ve Sql Injection zafiyeti oluşacaktır.

5- Removing Server Header

Sunucu ile ilgili bilgileri header içeriğinde gösterir. Bu bilgilerin görünmesini engellemek için Dotnet core içerisinde kullanımı;

6- CSP-Content Security Policy

Web güvenliğinin yumuşak karnı Javascript ve stil dosyaları gibi dışarıdan yüklenen kaynakların bizim sayfamızın orjin’inde / context’inde çalışmasıdır. CSP ile javascript, css, font vb dosyalarımız için ekstra güvenlik sağlamak bizim için yarar sağlayabilir.

Örnek bir CSP headerı aşağıdaki gibidir:

Content-Security-Policy: KONTROL_ALANI degerler

Referrer-Policy

Bir site, kendisi üzerinden başka bir siteye erişim yapıldığında, Referer headerı ile kendi adresini belirtir. Hedef site de yine Referer headerı ile bu gezinime kaynak teşkil eden siteyi görebilir. Referer headerı sadece site üzerindeki bir link tıklandığında değil, aynı zamanda stil, imaj ve script yüklemelerinde, form gönderimlerinde de yapılan isteğe eklenecektir. Ancak bazen URL, ifşa edilmemesi daha iyi olan bazı özel bilgiler içerebilir. Bu gibi durumlarda eklenmelidir.

Feature Policy

Feature Policy ile konum bilgilerine erişim, mikrofon ve kamera kullanımı, multi medya oynatma özellikleri, jiroskop vb sensörler gibi pek çok tarayıcı özelliğinin etkin olup olmayacağı kullanıcının global tarayıcı ayarları dışında, sitelerdeki talimatlar ile de yönetilebilir.

Yukarıda parça parça anlattığımız bütün Security Header’ları kapsayan bir middleware yazalım;

Bir extension ile daha kullanışlı hale getirmek istersek;

Security Header’lar ile basit detaylar ile web uygulamamızı daha güvenlikli hale getirebiliriz.

Güvenlik için header’ları ekledikten sonra test için https://securityheaders.com/ adresini kullanabilirsiniz.

--

--