JavaScript Web Güvenlik Mimarisi

Günümüz artık internet çağı ve bu çağa ayak uydurmak zorundayız. Yapılan ve bulunan yeni teknolojilerin internet üzerinden olduğunu görüyoruz. Ya da günümüzde manuel olarak yaptığımız işleri artık internet üzerinden halledebiliyoruz. Bu sayede ticaret ayağının büyük bir kısmı internet üzerinden yapılmaya ve daha da geliştirilmeye devam ediyor. Bugün sizlere bu işlemleri yaparken ya da yeni bir web sitesi açtığınızda, uygulama kurduğunuzda yapmanız gereken en önemli kurallardan birini açıklamaya çalışacağım: Web Güvenlik Mimarisi. Web Güvenlik Mimarisi, aslında bir uygulamayı yaparken dikkat edilmesi gereken en önemli konulardan bir tanesidir. Eğer yaptığınız uygulama bir e-ticaret muhasebe uygulaması ya da verilerin saklanacağı, değerli bilgileri taşıyan bir uygulama ise güvenliğe kesinlikle dikkat etmeniz gerekir. Artık ‘hack’ konusu çok ama çok popüler bir şekilde ilerliyor.

Öncelikle bir yazılımcı olarak, sağlıklı bir Web Güvenlik Mimarisi oluşturmak için yapmanız gereken en önemli kural, yazdığınız kodları analiz etmeniz ve testlerinizi yapmanızdır. Şimdi sizlere kullanılan saldırıları ve bunlara karşı Web güvenliği için nasıl önlem almamız gerektiğini anlatacağım.

İçindekiler

JavaScript Web Güvenlik Mimarisi

Cross Site Scripting Saldırıları

Cross Site Scripting yazılı anlatmadan önce aşağıdaki videoyu izlemenizi öncelikle öneriyorum. Güzel bir anlatımla aslında Cross Site Scripting saldırılarını anlatıyor.

Cross-Site Scripting (XSS) yukarıdaki videoda da izlemiş olduğunuz gibi inputların içine yerleştirilen JavaScript ile kolay bir şekilde sizin bilgilerinizi alabilir.

XSS için üç ana saldırı stratejisi vardır;

Bunlar DOM XSS, Reflected XSS ve Stored XSS’ dir.

DOM XSS (Document Object Model Cross-Site Scripting)

Bu tür XSS saldırıları, tarayıcı tarafında JavaScript kodunun çalıştırılmasını hedefler. DOM XSS, genellikle tarayıcı tarafında kullanıcı girdilerinin doğrudan işlenmesi veya yetersiz doğrulama ve filtreleme işlemleri sonucu ortaya çıkar.

DOM XSS örnek olarak

  • Client-Side Manipulation (İstemci Tarafı Manipülasyonu): Web uygulaması, kullanıcı girdilerini doğrudan JavaScript ile işleyip DOM üzerinde değişiklik yapar. Bu işlem sırasında kullanıcı girdileri yeterince doğrulanmaz veya filtrelenmezse, kötü niyetli kullanıcılar tarafından JavaScript enjeksiyonu yapılabilir.
  • JavaScript Frameworks and Libraries (JavaScript Çatıları ve Kütüphaneleri): Modern web uygulamalarında kullanılan JavaScript çatıları veya kütüphaneleri doğru kullanılmazsa, XSS savunmaları zayıf kalabilir ve DOM XSS açıkları ortaya çıkabilir.
  • Browser API Usage (Tarayıcı API Kullanımı): Tarayıcı API’leri, kullanıcı girdileriyle etkileşimli olarak çalıştırılırken güvenlik kontrolleri yetersizse, DOM XSS açıkları oluşabilir.

Reflected XSS (Cross-Site Scripting)

Genellikle kullanıcıya sunulan verilerin doğrudan tarayıcıya geri yansıtıldığı ve bu yolla kötü niyetli JavaScript kodlarının çalıştırılmasını sağlayan bir web uygulaması güvenlik açığı türüdür. Bu tür XSS saldırıları, kullanıcı tarafından sağlanan verilerin doğrudan web sayfasına yansıtılması sonucunda ortaya çıkar.

Bir reflected XSS saldırısında, saldırgan genellikle bir URL parametresi, form girişi veya başka bir kullanıcı etkileşimi aracılığıyla kötü niyetli bir JavaScript parçasını web uygulamasına gönderir.

Web uygulaması bu veriyi doğrudan tarayıcıya geri yansıttığında, tarayıcı bu kodu güvenlik önlemleri olmadan çalıştırabilir. Böylece, saldırganın gönderdiği kötü niyetli kodlar, tarayıcıda kullanıcının oturum açtığı site bağlamında çalışabilir ve kullanıcıların oturumlarını ele geçirmek, çerezleri çalmak veya başka kötü amaçlar için kullanılabilir.

Reflected XSS saldırıları genellikle aşağıdaki senaryolarda ortaya çıkar:

  1. URL Parametreleri: Web uygulaması, kullanıcıya bir hata mesajı veya arama sonuçları gibi bilgileri URL parametreleri aracılığıyla geri gönderir. Eğer bu parametreler doğrudan kullanılır ve filtrelenmezse, saldırgan bu parametreleri kötü niyetli JavaScript kodları ile manipüle edebilir.
  2. Form Girişleri: Web uygulamasında kullanıcıların girdiği form verileri, doğrudan HTML sayfasına yansıtılarak geri döner. Eğer bu veriler yeterince doğrulanmaz veya filtrelenmezse, saldırgan bu girdiler aracılığıyla XSS saldırısı gerçekleştirebilir.

Reflected XSS saldırılarını önleneyerek Web Güvenlik Mimarisi oluşturmak için web uygulamalarında güvenlik kontrolleri yapılmalıdır. Kullanıcı girdileri doğru bir şekilde filtrelenmeli veya kodlanmalıdır (örneğin, HTML kodlaması yerine güvenli metin olarak işlenmelidir). Ayrıca, tarayıcı tarafındaki güvenlik mekanizmaları (örneğin, Content Security Policy) kullanılarak XSS saldırılarına karşı ek önlemler alınabilir. Aşağıdaki videoda aslında size nasıl url koruması yapılır React üzerinden bir anlatımla gösteriyor;

Reflected XSS Saldırılarını Önleme Yöntemleri

Content Security Policy (İçerik Güvenlik Politikası)

Content Security Policy (CSP) kullanarak, tarayıcıya hangi kaynaklardan içerik yüklenebileceğini belirtebilirsiniz. Bu, XSS saldırılarını önlemeye yardımcı olabilir. Detaylı olarak incelemek isterseniz buradan bakabilirsiniz.

Input Validation (Giriş Doğrulama)

Kullanıcı girişi gibi güvensiz verileri doğrulamak ve temizlemek, potansiyel XSS saldırılarını önlemek için ilk adımdır. Örneğin, HTML etiketlerini veya JavaScript kodunu içeren kullanıcı girişi kabul etmeyin.

Output Encoding (Çıkış Kodlama)

Kullanıcı girişlerini kullanırken veya dinamik olarak oluşturulan HTML içeriğini tarayıcıya gönderirken, doğru bir şekilde kodlanmış çıktı kullanın. Bu, tarayıcı tarafından JavaScript kodu olarak yorumlanabilecek içeriği güvenli hale getirir.

Örneğin, < karakterini &lt; ve > karakterini &gt; ile değiştirerek HTML içeriğini güvenli hale getirebilirsiniz.

(Cross-Site Request Forgery) Saldırılarına Karşı Önlemler

CSRF saldırıları, oturum açmış bir kullanıcının kimliği ile kötü niyetli bir site tarafından otomatik olarak gönderilen isteklerle gerçekleşir. Bu tür saldırıları önlemek için şu önlemler alınabilir:

SameSite Cookies

SameSite attribute’ü ile HTTP cookies’in hangi isteklerde gönderilebileceğini sınırlayabilirsiniz. SameSite=None; Secure gibi ayarlar modern tarayıcılarda CSRF saldırılarını önlemeye yardımcı olabilir.

Referer Header Kontrolü

Referer header’ını kullanarak, isteği yapan kaynağın doğruluğunu kontrol edebilirsiniz. Ancak bu yöntem yalnızca güvenilir bir referer header’ı varsa etkili olabilir.

Bu önlemler, JavaScript uygulamalarında XSS ve CSRF gibi güvenlik tehditlerini azalarak Web Güvenlik Mimarisi oluşturmanıza yardımcı olabilir. Güvenlik konularında bilinçli olmak ve düzenli olarak güvenlik güncellemelerini takip etmek önemlidir.

Web Güvenlik Mimarisi Oluştururken Dikkat Edilmesi Gereken Diğer Web Saldırı Çeşitleri

SQL Injection (SQL Enjeksiyonu)

Kötü niyetli kullanıcılar, web uygulamalarına gönderdikleri manipüle edilmiş SQL sorguları aracılığıyla veri tabanıyla etkileşime geçmeye çalışır. Bu saldırı türü, uygulamanın güvenli olmayan SQL sorgularını doğrudan veri tabanına göndermesi durumunda gerçekleşir. Saldırganlar, veri tabanından veri çalabilir, veri tabanı yapılandırmasını değiştirebilir hatta kontrolü ele geçirebilirler.

SQL Injection Saldırılarını Önleme Yöntemleri

Parametreli Sorgular Kullanın

SQL sorgularını parametrelerle oluşturun ve doğrudan değerleri içermek yerine parametreler aracılığıyla iletim yapın. Bu, SQL motorunun girişlerin içeriğini sorgu olarak yorumlamasını sağlar.

SQL Injection Saldırılarını Önleme Yöntemleri

Giriş Doğrulama ve Temizleme

Kullanıcı girişlerini doğrulamak ve temizlemek önemlidir. Özellikle kullanıcıdan alınan verileri doğrudan SQL sorgusuna dahil etmemek gerekir.

ORM Kullanımı

ORM (Object-Relational Mapping) kütüphaneleri, SQL Injection riskini azaltabilir çünkü SQL sorgularını otomatik olarak parametreli sorgulara dönüştürürler.

Session Hijacking (Oturum Kaçırma)

Oturum kaçırma saldırılarını önlemek için şu önlemler alınabilir:

Güçlü Oturum Kimlik Bilgileri: Oturum kimlik bilgileri (session cookies) güçlü bir şekilde oluşturulmalı ve yönetilmelidir. Uzun ve rastgele oluşturulan oturum kimlikleri kullanın.

HTTPS Kullanımı: HTTPS protokolü kullanarak, oturum bilgilerinin şifrelenmesini ve güvenliğini sağlayın. Bu, oturum bilgilerinin ağ üzerinde güvenli bir şekilde iletilmesini sağlar.

Path Traversal (Yol Geçişi)

Path traversal saldırılarını önlemek için şu önlemler alınabilir:

Yol Doğrulama:

Kullanıcı tarafından sağlanan dosya veya dizin yollarını doğrulayın ve sınırlayın. Sadece belirli dizinlerin veya dosyaların erişimine izin verin.

İzinlerin Doğru Ayarlanması

Sunucu dosya sistemi erişim izinlerini doğru bir şekilde ayarlayın. Web sunucunuzun çalıştığı kullanıcı hesabının yalnızca gerektiği kadar erişim izni olmalıdır.

Denial-of-Service (DoS) ve Distributed Denial-of-Service (DDoS) Saldırılarını Önlemek için Kullanılan Yöntemler

Saldırı Tespit ve Engelleme Sistemleri

Saldırıları tespit edebilen ve otomatik olarak engelleyen sistemler kullanın.

Yük Dengeleyici ve Yedekleme

Yük dengeleyici (load balancer) ve yedek sunucular gibi altyapısal önlemlerle uygulamanızın dayanıklılığını artırın.

Kaynak Sınırlamaları

Sunucu kaynaklarını sınırlayarak ve sınırlı erişim hızlarını ayarlayarak DoS saldırılarının etkilerini azaltın.

Günümüzde siber saldırılar gün geçtikçe hem gelişiyor hem de artıyor bu yüzden en güncel teknolojileri kullanarak kurallarına uygun bir şekilde kod yazmak her zaman güvenliği arttırır.

Sonuç olarak sizlere Web Güvenlik Mimarisi oluştururken dikkat edilmesi gereken en popüler saldırı yöntemlerini ve bunları nasıl önleyebileceğimizi açıklamaya çalıştım. Umarım faydalı olmuştur.

Facebook
Twitter
LinkedIn