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
- 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.
- 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.
- 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
<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:
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
from flask import Flask, request, escapeapp = Flask(__name__)
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çış
function escapeHTML(str) {
return str.replace(/[&<>"']/g, function(match) {
switch (match) {
case '&':
return '&';
case '<':
return '<';
case '>':
return '>';
case '"':
return '"';
case "'":
return ''';
}
});
}// 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ı
<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.