Net Hareket Tam Hizmet Ajansı

XSS Açıkları ile Açık Bulma ve Nasıl Korunulur?

XSS Nedir?

XSS (Cross-Site Scripting), web uygulamalarında sıkça karşılaşılan ve ciddi güvenlik açıklarına yol açabilen bir güvenlik zafiyetidir. XSS, saldırganların hedef web sitesine kötü niyetli komut dosyaları (genellikle JavaScript) enjekte etmesine olanak tanır. Bu komut dosyaları, diğer kullanıcıların tarayıcılarında çalışarak çeşitli zararlı eylemler gerçekleştirebilir.

XSS Türleri

  1. Stored XSS (Depolanan XSS): Kötü niyetli kod, web sunucusunda saklanır ve diğer kullanıcılar bu kodu gördüklerinde tetiklenir. Örneğin, bir yorum formu aracılığıyla zararlı kodun veri tabanına kaydedilmesi.
  2. Reflected XSS (Yansıyan XSS): Kötü niyetli kod, web uygulamasının anında yanıtında yansıtılır. Bu genellikle bir URL parametresi aracılığıyla gerçekleştirilir.
  3. DOM-Based XSS: Zararlı kod, istemci tarafındaki (client-side) komut dosyaları tarafından işlenir. Bu tür XSS, sayfanın DOM yapısını manipüle ederek gerçekleştirilir.

XSS ile Site Nasıl Hacklenir?

Örnek Senaryo: Reflected XSS Saldırısı

Bu örnekte, bir arama formu olan web sitesi hedef alınacak. Saldırgan, arama sorgusuna zararlı JavaScript kodu enjekte ederek saldırıyı gerçekleştirebilir.

Adım 1: Açığı Tespit Etme

html

<form action="search.php" method="get">
<input type="text" name="query" />
<input type="submit" value="Search" />
</form>

Arama formu, kullanıcıdan gelen “query” parametresini alır ve bunu sonuç sayfasında geri döner. Eğer bu parametre yeterince temizlenmezse, zararlı kod doğrudan sayfaya yansıtılabilir.

Adım 2: Zararlı Kod Enjekte Etme Saldırgan, aşağıdaki gibi bir URL oluşturur ve hedefe gönderir:

php

http://example.com/search.php?query=<script>alert('XSS')</script>

Eğer uygulama güvenli değilse, search.php sayfasında bu kod doğrudan çalıştırılır ve bir uyarı penceresi açılır.

Adım 3: Kötü Amaçlı Eylemler Bu temel saldırıyı daha da geliştirerek, çerezleri çalmak, oturum bilgilerini ele geçirmek veya kullanıcıyı zararlı sitelere yönlendirmek gibi daha karmaşık eylemler gerçekleştirilebilir.

XSS’ten Nasıl Korunuruz?

1. Kullanıcı Girdilerini Doğrulayın ve Temizleyin

Kullanıcı girdilerini hem sunucu hem de istemci tarafında doğrulamak ve temizlemek, XSS saldırılarını önlemenin ilk adımıdır.

Örnek: Python (Flask) ile Giriş Temizleme

python

from flask import Flask, request, escape

app = Flask(__name__)

@app.route('/search')
def search():
query = request.args.get('query', '')
safe_query = escape(query)
return f'Search results for: {safe_query}'

if __name__ == '__main__':
app.run()

2. Çıkış Noktasında (Output) Kodları Kaçış (Escape) Yapın

Kullanıcı girdilerini sayfada çıktılarken, özel karakterleri kaçışlamak XSS saldırılarını engelleyebilir.

Örnek: JavaScript ile Kaçış

javascript

function escapeHTML(str) {
return str.replace(/[&<>"']/g, function(match) {
switch (match) {
case '&':
return '&amp;';
case '<':
return '&lt;';
case '>':
return '&gt;';
case '"':
return '&quot;';
case "'":
return '&#039;';
}
});
}

// Kullanıcı girdisini güvenli şekilde kullanma
let userInput = "<script>alert('XSS')</script>";
let safeInput = escapeHTML(userInput);
document.getElementById('output').innerHTML = safeInput;

3. Güvenlik Politikaları (Content Security Policy) Kullanın

CSP, XSS saldırılarını önlemek için güçlü bir güvenlik katmanıdır.

Örnek: CSP Başlık Ayarları

html

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted.com;">

Bu politika, sadece belirtilen kaynaklardan (örneğin, ‘self’ ve ‘trusted.com’) gelen scriptlerin çalıştırılmasına izin verir.

Sonuç

XSS, web uygulamaları için ciddi bir tehdit oluşturan ve kullanıcı verilerini riske atan bir güvenlik açığıdır. Ancak, kullanıcı girdilerini doğrulamak ve temizlemek, güvenli çıkış (output) uygulamak ve güvenlik politikaları kullanmak gibi önlemler alarak bu tür saldırılardan korunmak mümkündür. Web uygulamalarınızı geliştirme sürecinde bu güvenlik önlemlerini dikkate alarak daha güvenli ve sağlam bir yazılım oluşturabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.