Bugün sizlere örnek bir Python kodu üzerinden SQL İnjection açığını nasıl kapatabiliriz bunu gösterip anlatmaya çalıştım umarım faydalı olmuştur.
query = "SELECT * FROM users WHERE username=? AND password=?"
cursor.execute(query, (username, password))
Kod:
from flask import Flask, request, render_template
import sqlite3
app = Flask(__name__)
@app.route('/')
def index():
return render_template('login.html')
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
# Parametreli sorgu ile SQL Injection önlenir
query = "SELECT * FROM users WHERE username=? AND password=?"
cursor.execute(query, (username, password))
user = cursor.fetchone()
conn.close()
if user:
return f"Giriş başarılı! Hoş geldin {username}"
else:
return "Hatalı kullanıcı adı veya şifre."
if __name__ == '__main__':
app.run(debug=True)
Açığın Temel Mantığı
- Web uygulaması, kullanıcıdan gelen veriyi (örneğin kullanıcı adı ve şifre) SQL sorgusuna ekler.
- Kötü niyetli bir kullanıcı, bu veri alanına kendi yazdığı özel SQL kodlarını yazar.
- Böylece uygulamanın veri tabanına gönderilen sorgu değişir, istenmeyen sorgular çalıştırılır.
query = "SELECT * FROM users WHERE username=? AND password=?"
cursor.execute(query, (username, password))
- Database bu veriyi sadece veri olarak algılar, SQL komutu olarak değil.

