🇹🇷
Merhaba!
SQL Düzenleyicisi
  • 🥳Merhaba!
  • 🔃API
    • API'ler
      • Alan Adı Sorgulama WHOIS API
      • İp Adresi Sorgulama API
      • Rastgele Kedi Resmi Gösteren API
      • Lokasyon
        • Ülkeler API
        • Şehirler API
      • T.C. Kimlik Doğrulama API
  • Hosting Solution
    • Cyberpanel
      • 500 Internal Server Hatası (Cyberpanel)
  • 🐻‍❄️LARAVEL
    • Laravel Projesi Oluşturma
    • Anasayfa Düzenleme ve Sayfa Ekleme
  • 🔳ERP TARAFI
    • ERP Nedir ?
    • ERP İş Süreçleri
    • Birimler
      • Üretim
      • Satış
      • Muhasebe
      • Stok Yönetimi
      • Mali Yönetimi
      • Müşteri Hizmetleri (Destek)
      • İnsan Kaynakları (Personel)
      • Proje Yönetimi
    • Kullanılan Terimler
      • Amortisman
  • 💻SQL Tarafı
    • Çalışmalar ve Notlar
      • Tablo Boyutlarını Öğrenme
      • Veritabanı Arası Sorgulama
      • Tabloların Satır Sayısını Bulma
      • Tablodaki Triggerları Açma&Kapatma
      • Tablo Bağlantısı (Tablo Bağlama)
      • Tabloların Satır Sayısını Bulma
    • Konular
      • Sorgulamalar
        • SELECT
        • FROM
        • WHERE
        • LIKE
        • JOINLER
          • INNER JOIN
          • FULL OUTER JOIN
          • RIGHT JOIN
          • LEFT JOIN
        • GROUP BY
        • HAVING
        • ORDER BY
        • LIMIT
        • COUNT
        • SUM
        • AVG
        • MIN
        • MAX
        • CASE
        • DISTINCT
        • SUBQUERY
        • SUBSTRING
        • TRUNCATE
      • String Fonksiyonlar
        • LEN
        • STRING_SPLIT
        • CHARINDEX
        • SUBSTRING
        • REPLACE
        • LOWER/UPPER
        • TRIM
        • LEFT/RIGHT
        • ASCII/CHAR
        • CONCAT
      • Zaman Fonksiyonları
        • DAY, MONTH, YEAR
        • DATEFROMPARTS
        • ISDATE
        • DATEADD
        • DATENAME
        • DATEPART
        • DATETIME
        • DATEDIFF
      • Matematiksel Fonksiyonlar
        • ROUND
        • FLOOR
        • DEGRESS
        • ACOS
        • ASIN
        • ATAN
        • ATN2
        • RAND
        • RAD
        • ABS/SIGN
        • FLOOR/CEILING
      • Döngüler
        • FOR
        • WHILE
      • Prosedür
        • Prosedür Nasıl Yazılır
      • Trigger
        • Triger Nasıl Yazılır
      • Index
        • Index Nasıl Yazılır
      • Cursor
        • Cursor Nasıl Yazılır
      • Fonksiyon Konuları
        • User Defined Functions
        • Aggregate Functions
      • Veritipleri ve Boyutları
      • İlişkisel Veritabanı
    • Dosyalar & Kaynaklar
      • SQL Veri Tipleri
      • T-SQL Join Tipleri
      • SQL Cheat Sheet
    • SQL Hataları ve Çözümleri
      • String or binary data would be truncated
      • Subquery returned more than 1 value.
      • Conversion failed when converting from a character string to uniqueidentifier
      • The multi-part identifier could not be bound
      • Arithmetic overflow error converting numeric to data type numeric
  • 💯ANADIL
    • Anadil Nedir ?
    • Çalışmalar ve Notlar
      • Cff
        • Cff İle Adını Alıp Kodunu Yazdırma
      • Şube Kodu İşaretlendiğinde ComboBox'ın Kapatılması.
      • Parametre İşaretlendiğinde TabSheet'te ki Grid'in kapatılması.
      • İf
        • İf İle Boş Kontrol
        • İf İle Uzunluk Kontrolü
      • Grid
        • Grid PushButton Kullanımı
        • Grid Oluşturma
      • Formdaki Gride Koşul Ekleme(FTC)
      • Yetki Servisi Çağırma
      • ComboList Doldurma
    • Kütüphane
      • RS32
        • Fonksiyonlar
          • BuildInsertStm
          • BuildDeleteStm
          • BuildSelectStm
          • BuildUpdateStm
          • PrepareStmDirect
          • ExecuteStmDirect
        • Metotlar
          • AddOrderBy
          • AddGroupBy
          • AppendToStm
      • CFF
        • Fonksiyonlar
        • Metotlar
      • Kontrol Nesneleri
        • ListBox ve ComboBox
          • AddToList
          • SelectTextInList
      • Diğer
        • IsNull
  • 🔬.NET TARAFI
    • .NET Nedir ?
    • Konular
      • Değişkenler
        • Boolean (Bool)
        • Byte
        • Char
        • Integer (INT)
        • Long
        • Single
        • Double
        • Decimal
        • String
        • Object
  • 😎PHP TARAFI
    • PHP Nedir ?
    • Konular
      • Temel Söz Dizimi
        • Değişkenler
        • Operatörler
        • Koşullar
        • Fonksiyonlar
        • Döngüler
        • Diziler
        • String İşlemleri
      • Form İşlemleri
        • Form Verilerini Alma
        • Form Verilerini Kontrol Etme
        • Form Verilerini İşleme
        • Form Alanlarına Ön Tanımlı Değerler Atama
        • Form Güvenliği
      • Veritabanı İşlemleri
        • Veritabanına Bağlanma
        • Veri Ekleme
        • Veri Sorgulama
        • Veri Güncelleme
        • Veri Silme
        • Veri Okuma
        • Transaksiyonlar
        • Veritabanı Bağlantılarını Yönetme
      • Sınıflar ve Nesneler
        • OOP İlkeleri
        • Autoloading
        • Ad alanları (Namespaces)
        • Statik Yöntemler ve Özellikler (Static Methods and Properties)
        • Soyut Sınıflar ve Yöntemler (Abstract Classes and Methods)
        • Arayüzler (Interfaces)
        • Miras (Inheritance)
        • Sınıflar ve Nesnelerin Temelleri
        • Kurucu Yöntemler
      • Güvenlik
        • SQL Enjeksiyonu
        • XSS (Cross-Site Scripting)
        • DoS (Denial of Service) Saldırıları
        • CSRF (Cross-Site Request Forgery)
        • Güvenli Parola Depolama
        • Dosya Yükleme
      • Dosya İşlemleri
      • API Entegrasyonları
        • API Nedir ?
        • RESTful API Nedir?
        • API İstekleri
        • API Yanıtları
        • API Entegrasyon Örnekleri
        • API Anahtarları
      • Framework
        • MVC Tasarım Deseni
        • Yönlendirme
        • Şablonlar
        • Veritabanı Erişimi
        • Güvenlik
        • API Entegrasyonları
        • Oturum Yönetimi
        • Test
        • Performans
        • Paket Yönetimi
  • 🎛️FRAMEWORK TARAFI
    • Framework Nedir?
    • Konular
      • Framework Türleri
      • Framework Avantajları ve Dezavantajları
      • Framework Kullanımı ve Örnekleri
      • Framework vs Kütüphane
      • Framework vs Platform
      • Framework vs API
      • Framework ve Tasarım Kalıpları
      • Framework ve MVC Mimari
      • Framework ve ORM
      • Framework ve Web Geliştirme
      • Framework ve Mobil Geliştirme
      • Framework ve Oyun Geliştirme
      • Framework ve Veri Bilimi
      • Framework ve Yapay Zeka
      • Framework Geliştirme Süreci
      • Framework Test Etme ve Hata Ayıklama
Powered by GitBook
On this page

Was this helpful?

  1. PHP TARAFI
  2. Konular
  3. Güvenlik

SQL Enjeksiyonu

SQL enjeksiyonu, kötü niyetli kullanıcıların bir web uygulamasına girilen verileri manipüle ederek, veritabanı sisteminde istenmeyen işlemler yapmalarına neden olan bir web güvenlik açığıdır. Bu tür bir saldırı ile birlikte, kullanıcılar bir web uygulaması formuna kötü amaçlı kodlar ekleyebilirler. Bu kodlar daha sonra sunucuda çalıştırılan SQL sorgularını manipüle ederek, veritabanında istenmeyen işlemler gerçekleştirebilirler. Bu işlemler arasında veri çalma, veri silme, veri değiştirme veya hatta tüm veritabanı sistemini devre dışı bırakma gibi işlemler yer alabilir.

Örnek olarak, bir kullanıcının adı ve şifresi alınan bir giriş formuna aşağıdaki gibi kötü niyetli bir kod eklenmiş olabilir:

$kullaniciAdi = "admin'; DROP TABLE uyeler; --";
$sifre = "sifrem123";

Bu kodun çalışması durumunda, sunucu tarafında yürütülen SQL sorgusu aşağıdaki gibi olacaktır:

SELECT * FROM uyeler WHERE kullaniciAdi='admin'; DROP TABLE uyeler; --' AND sifre='sifrem123'

Gördüğünüz gibi, kullanıcı adı giriş kutusuna eklenen kötü niyetli kod, SQL sorgusunu sonlandırıp, veritabanındaki "uyeler" tablosunu silmeye çalışır. "--" işareti, sonraki tüm karakterleri yorumlayarak, orada yazılan kodun çalışmasını engeller.

Bu tür bir saldırıyı önlemek için, formdan alınan verilerin doğru bir şekilde filtrelenmesi ve hazırlanması gerekmektedir. Bunun için, PHP'nin sağladığı hazır filtreleme fonksiyonları kullanılabilir. Bunların yanı sıra, PDO (PHP Data Object) gibi veritabanı kütüphaneleri, hazırlanan sorguları veritabanına göndermeden önce parametrelerin doğru bir şekilde filtrelenmesini sağlayarak, SQL enjeksiyonu saldırılarından koruma sağlar.

Örneğin, yukarıdaki form örneğinde, kullanıcı adı ve şifre verilerinin alınması ve PDO kullanılarak güvenli bir şekilde sorgulanması aşağıdaki gibi olabilir:

<?php
// PDO bağlantısı oluşturma
$dbHost = "localhost";
$dbName = "my_database";
$dbUser = "my_user";
$dbPass = "my_password";
$db = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);

// Form verilerini alma
$username = $_POST['username'];
$password = $_POST['password'];

// Veritabanı sorgusu yapma
$stmt = $db->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(array(':username' => $username, ':password' => $password));
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// Kullanıcı doğrulama
if ($user) {
  // Kullanıcı giriş yapabilir
  echo "Hoş geldiniz, " . $user['username'] . "!";
} else {
  // Kullanıcı adı veya şifre hatalı
  echo "Kullanıcı adı veya şifre hatalı.";
}
?>

Yukarıdaki kod örneğinde, öncelikle PDO bağlantısı oluşturulur. Daha sonra, form verileri $_POST dizisinden alınır ve PDO kullanarak veritabanı sorgusu yapılır. Sorgu, önceden hazırlanmış ifadelerle yapılır, böylece kullanıcı tarafından girilen veriler güvenli bir şekilde sorgulanır. Son olarak, sorgudan dönen sonuçlar kullanarak kullanıcı doğrulanır ve uygun mesajlar ekrana yazdırılır.

Last updated 2 years ago

Was this helpful?

😎