ASP.Net Core Projelerinde Güvenlik — CORS (Giriş)

Herkese Merhabalar,

Önceki yazımda ASP.Net Core projelerinde Secret Protection konusundan bahsetmiştim. Bu yazımda ise projemizde ise CORS (Cross-Origin Resource Sharing) ile ilgili topladığım bilgileri sizlerle paylaşacağım. Faydalı olması dileğiyle . 🙂

  • Browserlar’da; Web sayfasından farklı bir domaine istek gerçekleştirdiğinde, işlem reddedilir. Bu güvenlik işlemi Same Origin Policy olarak adlandırılır. Yapılan bu işlem tamamen güvenlik amaçlı gerçekleştirilmektedir.
  • Browserlar için farklı domain ne anlama gelir peki ? Farklı domain aslında “Protocol farklı,Host farklı, Port farklı” anlamına gelmektedir.
  • Örnek vermek gerekirse , bir sitenin 4000 portu ile 4001 portu farklı bir domain olarak algılanır.
  • Bir ASP.Net Core API projemiz olsun. Ve dışarıdan bu Api’deki endpointleri kullanabileceğimizi, çağırabileceğmizi hayal edelim. Yani basitçe şu şekilde düşünün. ASP.Net Core API projeniz içerisinde yazmış olduğunuz metotları , başka bir Web Uygulaması kullanacak. Ve bu API projesindeki Urlleri çağırarak işlem gerçekleştireceksiniz. Yani Web Projenizi belirli bir metotunda API’deki Update metotunuzun çağrılması gibi düşünebilirsiniz.
  • API projenizdeki metotları çağıracağınız Web projeniz, MVC projesi olabilir.
  • Bu Web projenizden Api projenize istek gerçekleştirdiğiniz zaman zaman .NET Core uygulamasından response olarak NoAccess-Control-Allow-Origin’ Header’ı döndürülür ve tam bu noktada Same Origin Policy devreye girmiş olur.
  • Projelerimizde Same Origin Policy güvenliğini esnetebilmek için CORS (Cross-Origin Resource Sharing) devreye girer.

CORS bir güvenlik önlemi değildir!

  • ASP.NET Core Api uygulamamızda CORS belirtmezsek, o zaman bu projemize hiç istek yapılamaz. CORS sayesinde, bu API uygulamasına hangi domainden gelen isteklerin kabul edilebileceğini belirleriz.

Farklı bir domaine istek yapılacağı zaman isteğe olumlu yanıt verilme işlemleri nasıl gerçekleşir ?

  • Öncelikle Web Uygulaması Api’ye istekte bulunur.
  • İstekte bulunurken Request kısmında Origin Key adında bir alan gönderilir.
  • Bu alan aslında web uygulamasının URL’idir. (kaynağıdır.).
  • Request Api tarafına Origin olarak gönderilir.
  • Api uygulamasında ise Response olarak Access-Control-Allow-Origin’e eş değer bir domain gönderilirse (yani web uygulamasının URL’ini) o zaman işlem olumlu olarak sonuçlanmış anlamına gelir.
  • Bu sayede Same Origin Policy esnetilmiş olur.

Bir sonraki yazımda görüşmek üzere …

https://github.com/KardelRuveyda/ASPNetSecurity kodları Github ‘da oluşturduğum Repository’den inceleyebilisiniz.

Kaynakça