XSS ve CSRF Nedir? Güvenlik Açıkları ve Önlenmesi: Python, PHP ve ASP Örnekleri
Web uygulamaları geliştirilirken karşılaşılan en yaygın güvenlik açıklarından ikisi XSS (Cross-Site Scripting) ve CSRF (Cross-Site Request Forgery)'dir. Bu açıklar, kötü niyetli kullanıcılar tarafından istismar edilebilir ve hem kullanıcı bilgilerini hem de sistemin güvenliğini tehdit edebilir. Bu makalede, XSS ve CSRF'yi detaylı bir şekilde inceleyecek ve Python, PHP ve ASP örnekleriyle bu güvenlik açıklarının nasıl engellenebileceğini açıklayacağız.
1. XSS (Cross-Site Scripting) Nedir?
XSS (Cross-Site Scripting), saldırganların web uygulamaları aracılığıyla zararlı JavaScript kodları enjekte etmesine olanak tanıyan bir güvenlik açığıdır. Saldırgan, bu şekilde kullanıcıların tarayıcılarında zararlı komutlar çalıştırabilir, kişisel verilerini çalabilir veya kötü amaçlı yazılımlar yayabilir.
XSS Türleri:
Stored XSS: Zararlı JavaScript kodları, web uygulamasına kalıcı olarak kaydedilir ve başka kullanıcılar bu kodları çalıştırır.
Reflected XSS: Zararlı kod, kullanıcı tarafından gönderilen bir parametre ile hemen işlenir ve çalıştırılır.
DOM-based XSS: JavaScript’in, web sayfasındaki kullanıcı verilerini işlerken güvenlik önlemleri almadığı durumlarda meydana gelir.
2. CSRF (Cross-Site Request Forgery) Nedir?
CSRF (Cross-Site Request Forgery), bir kullanıcının tarayıcısını kötü niyetli bir isteği fark etmeden göndermeye zorlamak amacıyla kullanılan bir saldırıdır. Bu saldırı, kullanıcının oturum bilgilerini ve kimlik doğrulama verilerini kullanarak, sistemde yetkisiz işlemler yapılmasını sağlar.
CSRF Saldırısının Çalışma Prensibi:
Kullanıcı, saldırganın hazırladığı zararlı bir web sitesini ziyaret eder.
Saldırgan, kullanıcının oturumunu kullanarak istenmeyen bir işlem başlatır (örneğin, parayı bir hesaba aktarmak).
Kullanıcı, bu işlemi bilmeden gerçekleştirir.
3. XSS ve CSRF Nasıl Engellenir?
Her iki güvenlik açığından da korunmak için bazı temel güvenlik önlemleri alınabilir. Şimdi, Python, PHP ve ASP gibi dillerde XSS ve CSRF saldırılarına karşı nasıl korunabileceğini görelim.
Python’da XSS ve CSRF’den Korunma
Python ile web uygulamaları geliştirilirken, Flask gibi framework’lerde XSS ve CSRF’yi engellemek için entegre güvenlik önlemleri bulunur.
Python XSS Koruması (Flask Örneği)
1from flask import Flask, render_template_string, request2from markupsafe import escape34app = Flask(__name__)56@app.route('/submit', methods=['POST'])7def submit():8user_input = request.form['username']9safe_input = escape(user_input) # XSS'den korunmak için encode et10return f"Merhaba, {safe_input}!"1112if __name__ == "__main__":13app.run(debug=True)Python CSRF Koruması (Flask Örneği)
1from flask import Flask, render_template, request2from flask_wtf.csrf import CSRFProtect34app = Flask(__name__)5app.config['SECRET_KEY'] = 'mysecretkey'6csrf = CSRFProtect(app)78@app.route('/submit', methods=['POST'])9def submit():10# CSRF token kontrolü yapılır11return "Form başarıyla gönderildi!"1213if __name__ == '__main__':14app.run()PHP’de XSS ve CSRF’den Korunma
PHP’de XSS ve CSRF saldırılarına karşı alınması gereken önlemler, doğrudan htmlspecialchars() fonksiyonu ve CSRF token kullanımını içerir.
PHP XSS Koruması
1<?php2$username = $_POST['username'];3$safe_username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');4echo "Merhaba, $safe_username!";5?>PHP CSRF Koruması
1<?php2session_start();34// CSRF token oluşturuluyor5if (empty($_SESSION['csrf_token'])) {6$_SESSION['csrf_token'] = bin2hex(random_bytes(32));7}89// Form gönderildiğinde CSRF token kontrolü yapılır10if ($_SERVER["REQUEST_METHOD"] == "POST") {11if ($_POST['csrf_token'] == $_SESSION['csrf_token']) {12echo "Form başarıyla gönderildi!";13} else {14echo "Geçersiz CSRF token!";15}16}17?>1819<form method="POST">20<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">21<input type="submit" value="Gönder">22</form>ASP’de XSS ve CSRF’den Korunma
ASP.NET’te XSS ve CSRF’yi engellemek için Server.HtmlEncode() ve CSRF token kullanımı gereklidir.
ASP.NET XSS Koruması
1<%2Dim username3username = Request.Form("username")45' XSS saldırılarına karşı koruma6Response.Write("Merhaba, " & Server.HtmlEncode(username))7%>ASP.NET CSRF Koruması
1<%2' CSRF token kontrolü yapılır3If Request.Form("csrf_token") = Session("csrf_token") Then4Response.Write("Form başarıyla gönderildi!")5Else6Response.Write("Geçersiz CSRF token!")7End If8%>910<form method="POST">11<input type="hidden" name="csrf_token" value="<%= Session("csrf_token") %>">12<input type="submit" value="Gönder">13</form>4. İpuçları ve En İyi Uygulamalar
XSS için Veri Temizleme: Kullanıcıdan alınan her türlü veriyi, HTML içerisine yerleştirmeden önce escape veya encode etmelisiniz.
CSRF için Token Kullanımı: Her form gönderiminde benzersiz bir CSRF token kullanarak, yalnızca geçerli istemcilerden gelen isteklerin kabul edilmesini sağlayın.
Güçlü Şifreleme ve Kimlik Doğrulama: Hem XSS hem de CSRF saldırılarına karşı, güçlü şifreleme algoritmaları ve kimlik doğrulama mekanizmaları kullanın.
Çift Katmanlı Güvenlik: Kullanıcıdan alınan verilerin yalnızca istemci tarafında değil, sunucu tarafında da doğrulama ve temizlenmesi önemlidir.
Hata Mesajları Gizleyin: Hata mesajları kullanıcıya detaylı bilgiler vermemeli, sadece genel hata mesajları sunulmalıdır.
XSS (Cross-Site Scripting) ve CSRF (Cross-Site Request Forgery), web uygulamalarında yaygın olarak karşılaşılan güvenlik açıklarıdır. XSS, kullanıcıların tarayıcılarına zararlı JavaScript kodları enjekte ederek kullanıcı bilgilerini çalmaya çalışırken, CSRF, kullanıcının kimlik doğrulama bilgilerini kullanarak kötü amaçlı işlemler yapmayı hedefler. Bu saldırılara karşı, Python, PHP ve ASP gibi dillerde alınabilecek birçok güvenlik önlemi mevcuttur. XSS'yi engellemek için verilerin doğru şekilde encode edilmesi, CSRF'yi engellemek içinse her formda bir CSRF token kullanmak gereklidir.
0 yorum