PHP ile Güvenlik Önlemleri

PHP, web uygulamalarında sıklıkla kullanılan bir sunucu tarafı programlama dilidir. Ancak, güvenlik açısından dikkat edilmesi gereken çok sayıda nokta vardır. Bu yazıda, PHP ile güvenlik önlemleri alarak uygulamalarınızı daha güvenli hale getirebileceğiniz en yaygın yöntemleri ve teknikleri detaylı bir şekilde ele alacağız.


1. SQL Enjeksiyon (SQL Injection) Önleme

SQL enjeksiyonu, saldırganların kötü niyetli SQL komutlarını veritabanınıza enjekte etmesine olanak tanır. Bu tür saldırılar, veritabanınızdaki verilere yetkisiz erişimi sağlayabilir.

Çözüm: Hazırlıklı İfadeler (Prepared Statements)

Hazırlıklı ifadeler, kullanıcı verilerini veritabanına güvenli bir şekilde göndermek için kullanılır. MySQLi veya PDO kullanarak, kullanıcı giriş verilerini veritabanına enjekte etmeden önce doğrulama yapabilirsiniz.

Örnek (PDO ile)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM kullanicilar WHERE email = :email');
$stmt->execute(['email' => $_POST['email']]);
$result = $stmt->fetch();

echo $result['isim'];
?>

Bu örnekte, veritabanı sorgusu kullanıcı tarafından sağlanan verilerle birlikte hazırlanmış bir şekilde gönderilmektedir, bu da SQL enjeksiyonunu önler.


2. XSS (Cross-site Scripting) Saldırılarına Karşı Korunma

XSS saldırıları, kullanıcıların tarayıcılarında kötü amaçlı JavaScript kodlarının çalıştırılmasına olanak tanır. Bu tür saldırılar, çalınan oturum bilgileri, kullanıcı verilerinin manipülasyonu ve web sayfasının tahrip edilmesi gibi sorunlara yol açabilir.

Çözüm: HTML Special Characters Kullanımı

Kullanıcıdan alınan verilerle ilgili işlemler yaparken htmlspecialchars() fonksiyonu kullanarak, verilerin HTML etiketlerine dönüştürülmesini engelleyebilirsiniz.

Örnek

<?php
$isim = $_POST['isim'];
echo "Hoş geldiniz, " . htmlspecialchars($isim, ENT_QUOTES, 'UTF-8');
?>

Bu örnekte, htmlspecialchars() fonksiyonu kullanılarak, kullanıcı tarafından girilen özel karakterler güvenli bir şekilde işleniyor.


3. Dosya Yükleme Güvenliği

Kullanıcıların dosya yüklemesi, web uygulamanızda büyük güvenlik riskleri oluşturabilir. Saldırganlar, zararlı dosyalar yükleyerek sisteminize zarar verebilir veya kötü amaçlı yazılımlar çalıştırabilir.

Çözüm: Dosya Türü ve Boyutu Kontrolü

Yüklenen dosyaların türünü ve boyutunu kontrol etmek önemlidir. Yalnızca belirli türdeki dosyaların kabul edilmesi gerekir.

Örnek

<?php
$izinliUzantilar = ['jpg', 'jpeg', 'png'];
$dosyaAdi = $_FILES['dosya']['name'];
$dosyaUzantisi = pathinfo($dosyaAdi, PATHINFO_EXTENSION);
$dosyaBoyutu = $_FILES['dosya']['size'];

if (in_array($dosyaUzantisi, $izinliUzantilar) && $dosyaBoyutu < 5000000) {
    move_uploaded_file($_FILES['dosya']['tmp_name'], 'uploads/' . $dosyaAdi);
    echo "Dosya yüklendi!";
} else {
    echo "Geçersiz dosya türü veya dosya boyutu!";
}
?>

Bu örnekte, yalnızca .jpg, .jpeg, ve .png dosyalarına izin verilir ve dosya boyutunun 5MB’ı geçmemesi sağlanır.


4. CSRF (Cross-Site Request Forgery) Önleme

CSRF, bir kullanıcının, kimlik doğrulaması yapılmış bir oturum üzerinden kötü niyetli bir işlem yapmasını sağlamak için kullanılan bir saldırı türüdür.

Çözüm: CSRF Token Kullanımı

CSRF saldırılarından korunmak için her formda CSRF token kullanmak önemlidir. Bu token, form verisiyle birlikte sunucuya gönderilir ve her işlemde doğrulanır.

Örnek: CSRF Token Kullanımı

<?php
session_start();

// CSRF token oluşturulması
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>

<form method="post" action="islem.php">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <input type="submit" value="Gönder">
</form>

<?php
// CSRF token doğrulaması
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($_POST['csrf_token'] != $_SESSION['csrf_token']) {
        die('Geçersiz CSRF token!');
    }
    // İşlem kodu...
}
?>

Bu örnekte, her form gönderimiyle birlikte bir CSRF token doğrulanır.


5. Şifreleme ve Güçlü Parolalar

Şifrelerin düzgün bir şekilde saklanmaması, sisteminizin ciddi güvenlik açıklarına sahip olmasına yol açar. Düz metin olarak saklanan şifreler kolayca ele geçirilebilir.

Çözüm: password_hash() ve password_verify() Fonksiyonları

PHP, şifreleri güvenli bir şekilde saklamak için password_hash() fonksiyonunu sunar. Bu fonksiyon, şifreyi karma (hash) formatında saklar ve veritabanınıza güvenli bir şekilde kaydeder. Şifreyi doğrulamak için ise password_verify() fonksiyonunu kullanabilirsiniz.

Örnek

<?php
// Şifreyi hash'leme
$hashedPassword = password_hash('kullaniciSifresi123', PASSWORD_DEFAULT);

// Şifreyi doğrulama
if (password_verify('kullaniciSifresi123', $hashedPassword)) {
    echo "Şifre doğru!";
} else {
    echo "Şifre yanlış!";
}
?>


6. Oturum Yönetimi ve Güvenliği

PHP’de oturumlar, kullanıcıların web uygulamasında kimliklerini doğrulamak için yaygın olarak kullanılır. Ancak, oturumlar kötüye kullanılabilir.

Çözüm: Oturum Güvenliği İçin Öneriler

  • Oturum ID’sini gizli tutun. Oturum ID’si, kullanıcıyı tanımak için kullanılır ve çalındığında oturum ele geçirilebilir.
  • session_regenerate_id() fonksiyonunu kullanarak, her başarılı giriş işleminden sonra oturum ID’sini değiştirin.

Örnek

<?php
session_start();
session_regenerate_id(true); // Yeni oturum ID'si oluşturuluyor
?>


Sonuç

PHP ile güvenlik önlemleri almak, web uygulamalarınızın korunması için kritik önem taşır. Yukarıda bahsedilen güvenlik önlemlerini uygulayarak, verilerinizi ve kullanıcı bilgilerinizi koruyabilir, potansiyel saldırılara karşı savunma sağlayabilirsiniz.

guest
0 Yorum
Eskiler
En Yeniler Beğenilenler
Inline Feedbacks
View all comments
0
YORUM YAPx