Elbette, anlıyorum! Bir önceki "Daha Verimli PHP Kodu Yazmak İçin 5 İpucu" konsepti yerine, PHP'ye yeni başlayanlar veya belli başlı zorluklar yaşayanlar için daha temel ve pratik bir yaklaşımla, "PHP'de Sık Yapılan Hatalar ve Kaçınma Yolları" konulu bir blog yazısı hazırlayabiliriz. Bu, genellikle daha geniş bir kitleye hitap eder ve okuyucularınızın kod kalitesini doğrudan artırmalarına yardımcı olabilir.

İşte size yeni bir taslak:


PHP'de Sık Yapılan Hatalar ve Kaçınma Yolları

Merhaba değerli yazılımcı dostlar!

PHP, web geliştirme dünyasının en popüler dillerinden biri. Hızlıca prototip geliştirmeye olanak tanıması ve geniş topluluk desteği sayesinde birçok projede tercih ediliyor. Ancak, dilin esnekliği bazen bazı yaygın hatalara yol açabiliyor. Bu hatalar başlangıçta gözden kaçsa da, ilerleyen zamanlarda projenizin bakımını zorlaştırabilir, hatta güvenlik açıklarına neden olabilir.

Bu yazımızda, PHP geliştirirken sıkça karşılaşılan hataları ve bu hatalardan nasıl kaçınabileceğinizi pratik ipuçlarıyla ele alacağız. Hazırsanız, başlayalım!

1. $_GET ve $_POST Verilerini Doğrudan Kullanma: Güvenlik Açığı Riski!

Bu, PHP'de yapılan en temel ve tehlikeli hatalardan biridir. Kullanıcıdan gelen verileri (URL'deki $_GET parametreleri veya formdaki $_POST verileri) doğrulamadan ve temizlemeden doğrudan veritabanı sorgularında veya HTML çıktılarında kullanmak, SQL Enjeksiyonu ve XSS (Cross-Site Scripting) gibi ciddi güvenlik açıklarına davetiye çıkarır.

  • Nasıl Kaçınırız?

    • Girdi Doğrulama: Her zaman gelen verinin beklenen formatta olup olmadığını kontrol edin (sayı mı olmalı, string mi, belirli bir uzunlukta mı?).
    • Temizleme (Sanitization): Veritabanına yazmadan önce mysqli_real_escape_string() veya PDO'nun hazırlıklı ifadelerini (prepared statements) kullanın. HTML çıktısı verirken htmlspecialchars() fonksiyonunu kullanarak XSS saldırılarını önleyin.

    Örnek:

    PHP

     

    // Kötü: Doğrudan kullanım
    // $kullaniciAdi = $_POST['username'];
    // $sorgu = "SELECT * FROM users WHERE username = '$kullaniciAdi'";
    
    // İyi: Hazırlıklı ifade (PDO ile)
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
    $stmt->execute(['username' => $_POST['username']]);
    
    // HTML çıktısı için:
    echo htmlspecialchars($_GET['mesaj']);
    

2. Hata Yönetimini Göz Ardı Etmek

Geliştirme aşamasında hataları görmek önemlidir, ancak üretim (production) ortamında hataların kullanıcılara gösterilmesi hem profesyonel olmayan bir görüntüye neden olur hem de uygulamanız hakkında hassas bilgiler ifşa edebilir.

  • Nasıl Kaçınırız?
    • Geliştirme Ortamı: php.ini dosyanızda display_errors = On ve error_reporting = E_ALL ayarlarını kullanın. Bu, geliştirme sırasında tüm hataları görmenizi sağlar.
    • Üretim Ortamı: display_errors = Off ve log_errors = On ayarlarını kullanın. Hataları bir hata günlüğü dosyasına (error_log) yazdırın ve kullanıcılara genel bir hata mesajı gösterin. Bu, hem uygulamanızın güvenliğini artırır hem de kullanıcı deneyimini bozmaz.

3. Çok Fazla Global Değişken Kullanımı

Kodunuzun her yerinden erişilebilen global değişkenler kullanmak cazip gelebilir. Ancak bu, kodun takip edilebilirliğini azaltır, bağımlılıkları artırır ve test etmeyi zorlaştırır. Hangi fonksiyonun hangi global değişkeni değiştirdiğini anlamak zamanla imkansız hale gelebilir.

  • Nasıl Kaçınırız?
    • Bağımlılık Enjeksiyonu (Dependency Injection): Özellikle büyük projelerde, bağımlılıkları fonksiyonlara veya sınıfların yapıcılarına (constructor) parametre olarak geçirin. Bu, kodunuzu daha modüler ve test edilebilir hale getirir.
    • Sınıflar ve Nesneler: İlgili verileri ve fonksiyonları sınıflar içinde birleştirin.

4. Fonksiyonları ve Dosyaları Gereksiz Yere Tekrar Yükleme

Aynı fonksiyon veya sınıf tanımını birden fazla kez include veya require etmek, "Redeclared function/class" hatalarına yol açar ve gereksiz kaynak tüketimine neden olur.

  • Nasıl Kaçınırız?
    • require_once veya include_once kullanın. Bu yapılar, dosyanın veya fonksiyonun yalnızca bir kez yüklenmesini garanti eder.
    • Otomatik Yükleme (Autoloading): Modern PHP uygulamalarında (özellikle framework'lerde), sınıfları manuel olarak yüklemek yerine PSR-4 gibi standartlara uygun otomatik yükleyiciler kullanın. Bu, ihtiyaç duyulduğunda sınıfların otomatik olarak yüklenmesini sağlar ve kodunuzu çok daha düzenli hale getirir.

5. Şifreleri Düz Metin Olarak Saklama

Veritabanınızda veya herhangi bir yerde kullanıcı şifrelerini düz metin (plain text) olarak saklamak, büyük bir güvenlik zafiyetidir. Veritabanınız bir şekilde ele geçirilirse, tüm kullanıcı şifreleri açığa çıkar ve bu, kullanıcılarınız için ciddi riskler oluşturur.

  • Nasıl Kaçınırız?

    • Şifreleri Hash'leyin: Şifreleri saklarken mutlaka tek yönlü hash algoritmaları kullanın. PHP'nin yerleşik password_hash() ve password_verify() fonksiyonları bu iş için biçilmiş kaftandır. Güvenli ve doğru tuzlama (salting) yöntemlerini otomatik olarak uygularlar.

    Örnek:

    PHP

     

    // Şifreyi hash'leme
    $hashedPassword = password_hash($duzSifre, PASSWORD_DEFAULT);
    
    // Giriş yaparken şifreyi doğrulama
    if (password_verify($girilenSifre, $hashedPassword)) {
        // Şifre doğru
    }
    

Sonuç

PHP, güçlü ve kullanışlı bir dil olsa da, bazı yaygın hataları bilmek ve bunlardan kaçınmak, hem daha güvenli hem de daha bakımı kolay uygulamalar geliştirmenizi sağlar. Bu ipuçlarını kodlama pratiğinize dahil ederek, kendinizi ve projelerinizi birçok potansiyel sorundan koruyabilirsiniz. Unutmayın, iyi bir geliştirici olmak, sadece kodu çalıştırmak değil, aynı zamanda doğru, güvenli ve sürdürülebilir kod yazmaktır.

Okunma Sayısı: 12

Bu yazıyı paylaş:
X