Temel Güvenlik Açıkları ve Önlemleri: Python, PHP ve ASP ile Uygulama Güvenliği
Güvenlik, yazılım geliştirme sürecinde her zaman öncelikli bir konu olmalıdır. Yazılım uygulamaları, kötü niyetli kullanıcılar tarafından hedef alınabilir ve bu tür saldırılar, ciddi veri ihlallerine, sistem kesintilerine ve finansal zararlara yol açabilir. Bu makalede, temel güvenlik açıklarını inceleyecek ve bu açıkları Python, PHP ve ASP ile nasıl önleyebileceğinizi anlatacağız. Ayrıca, güvenlik açıklarından korunmak için almanız gereken önlemleri örneklerle açıklayacağız.
1. Temel Güvenlik Açıkları Nelerdir?
Güvenlik açıkları, uygulamalardaki zayıf noktalar olup kötü niyetli kullanıcılar tarafından saldırıya uğrayabilir. İşte en yaygın güvenlik açıkları:
SQL Enjeksiyonu (SQL Injection): Veritabanı sorgularına kötü niyetli SQL komutlarının eklenmesiyle yapılan bir saldırıdır.
XSS (Cross-Site Scripting): Kullanıcılara zararlı JavaScript kodları enjekte ederek yapılan saldırıdır.
CSRF (Cross-Site Request Forgery): Kullanıcıyı kötü niyetli bir isteği fark etmeden göndermeye zorlar.
Duyarlı Veri Sızdırma: Şifreler, kredi kartı bilgileri ve kişisel veriler gibi hassas bilgilerin korunmaması.
2. SQL Enjeksiyonu (SQL Injection) ve Önlenmesi
SQL enjeksiyonu, veritabanı sorgularına dışarıdan kötü niyetli SQL komutlarının eklenmesiyle gerçekleştirilir. Bu tür saldırılar, kullanıcı verilerini çalmak, veri silmek veya veritabanını değiştirmek için kullanılabilir.
Python ile SQL Enjeksiyonundan Korunma
Python'da SQL enjeksiyonuna karşı korunmak için parametreli sorgular kullanmak gereklidir.
1import sqlite323# Bağlantı kurma4conn = sqlite3.connect('database.db')5cursor = conn.cursor()67# Kullanıcıdan alınan veriler8username = input("Kullanıcı Adı: ")9password = input("Şifre: ")1011# SQL enjeksiyonuna karşı korunmak için parametreli sorgu12cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))13result = cursor.fetchone()1415if result:16print("Giriş başarılı!")17else:18print("Geçersiz kullanıcı adı veya şifre.")1920conn.close()PHP ile SQL Enjeksiyonundan Korunma
PHP'de de SQL enjeksiyonunu engellemek için PDO (PHP Data Objects) kullanarak güvenli sorgular yazılabilir.
1<?php2try {3// Veritabanı bağlantısı4$pdo = new PDO("mysql:host=localhost;dbname=testdb", "root", "password");5$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);67// Kullanıcıdan alınan veriler8$username = $_POST['username'];9$password = $_POST['password'];1011// Parametreli sorgu12$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");13$stmt->bindParam(':username', $username);14$stmt->bindParam(':password', $password);15$stmt->execute();1617if ($stmt->rowCount() > 0) {18echo "Giriş başarılı!";19} else {20echo "Geçersiz kullanıcı adı veya şifre.";21}2223} catch (PDOException $e) {24echo "Hata: " . $e->getMessage();25}26?>ASP.NET ile SQL Enjeksiyonundan Korunma
ASP.NET ile SQL enjeksiyonundan korunmak için parameterized queries kullanmak gereklidir.
1<%2Dim conn, cmd, username, password3Set conn = Server.CreateObject("ADODB.Connection")4conn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=testdb;User ID=sa;Password=password"56username = Request.Form("username")7password = Request.Form("password")89' Parametreli sorgu10Set cmd = Server.CreateObject("ADODB.Command")11cmd.ActiveConnection = conn12cmd.CommandText = "SELECT * FROM users WHERE username = ? AND password = ?"13cmd.Parameters.Append cmd.CreateParameter(, 200, 1, 255, username)14cmd.Parameters.Append cmd.CreateParameter(, 200, 1, 255, password)1516Set rs = cmd.Execute()1718If Not rs.EOF Then19Response.Write "Giriş başarılı!"20Else21Response.Write "Geçersiz kullanıcı adı veya şifre."22End If2324rs.Close25Set rs = Nothing26conn.Close27Set conn = Nothing28%>3. XSS (Cross-Site Scripting) ve Önlenmesi
XSS, kullanıcıların web sayfasında zararlı JavaScript kodları çalıştırmasına olanak tanır. Bu tür saldırılar, kullanıcı bilgilerini çalmak ve kötü amaçlı yazılım yaymak için kullanılabilir.
Python ile XSS'den Korunma
Python’da XSS saldırılarından korunmak için kullanıcıdan alınan verilerin düzgün bir şekilde HTML'e encode edilmesi gerekir.
1import cgi23# Kullanıcıdan alınan veriyi güvenli hale getirme4form = cgi.FieldStorage()5user_input = form.getvalue("username")6safe_input = cgi.escape(user_input)78print(f"Merhaba, {safe_input}!")PHP ile XSS'den Korunma
PHP’de XSS saldırılarını engellemek için htmlspecialchars() fonksiyonu kullanılarak veriler encode edilebilir.
1<?php2$username = $_POST['username'];3$safe_username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');4echo "Merhaba, $safe_username!";5?>ASP.NET ile XSS'den Korunma
ASP.NET’te XSS saldırılarından korunmak için verilerin HttpUtility.HtmlEncode() fonksiyonu ile encode edilmesi gereklidir.
1<%2Dim username3username = Request.Form("username")45' XSS saldırılarına karşı koruma6Response.Write("Merhaba, " & Server.HtmlEncode(username))7%>4. CSRF (Cross-Site Request Forgery) ve Önlenmesi
CSRF saldırıları, kullanıcıyı kötü amaçlı bir isteği fark etmeden göndermeye zorlar. Bu tür saldırıları engellemek için token kullanılması gereklidir.
Python ile CSRF Koruması
Flask gibi Python web framework'lerinde CSRF koruması için csrf_token kullanılır.
1from flask import Flask, render_template_string, 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 ile CSRF Koruması
PHP'de CSRF koruması için her formda benzersiz bir token kullanılabilir.
1<?php2session_start();3if ($_SERVER["REQUEST_METHOD"] == "POST") {4if ($_POST['csrf_token'] == $_SESSION['csrf_token']) {5echo "Form başarıyla gönderildi!";6} else {7echo "Geçersiz CSRF token!";8}9}1011$_SESSION['csrf_token'] = bin2hex(random_bytes(32));12?>1314<form method="POST">15<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">16<input type="submit" value="Gönder">17</form>
0 yorum