PHP, uzun bir geçmişe sahip olmasına rağmen, hala gerçek dünya web uygulamaları geliştirmek için yaygın bir şekilde kullanılmaktadır.
Sorun PHP’nin kendisinde değil. Sorun, PHP ile yazılan kodun nasıl yapılandırıldığı, güvenliğinin sağlandığı ve sürdürüldüğüdür.
Kötü yazılmış bir PHP uygulaması yavaş, güvensiz ve güncellenmesi zor hale gelebilir. Ancak, doğru mimari, güvenli kod yazım uygulamaları, optimize edilmiş veritabanı sorguları ve sürdürülebilir yapı ile inşa edilen modern bir PHP uygulaması, hala iş web siteleri, paneller, API’ler, CMS platformları ve özel web uygulamaları için sağlam bir seçenek olabilir.
Bu yazıda, güvenli ve ölçeklenebilir web uygulamaları geliştirirken en önemli pratik PHP geliştirme alanlarına göz atacağız.
PHP’nin Hala Neden Önemli Olduğu
PHP, yaygın arka uç sorunlarını etkili bir şekilde çözmesi nedeniyle hala kullanılabilir durumdadır.
Aşağıdaki konuları ele alabilir:
- Dinamik web siteleri
- Kullanıcı kimlik doğrulaması
- Yönetici panelleri
- CMS platformları
- REST API’ler
- İş portalları
- eCommerce sistemleri
- CRM ve ERP modülleri
- Raporlama sistemleri
- Dosya yüklemeleri
- Veritabanı tabanlı iş akışları
PHP aynı zamanda MySQL, MariaDB ve PostgreSQL gibi popüler veritabanlarıyla iyi çalışır. Olgun çerçeveler, güçlü topluluk desteği ve geniş barındırma uyumluluğu ile birlikte gelir.
Birçok web uygulaması için PHP hala pratik bir arka uç teknolojisidir.
Her Şeyi Başlangıçtan Yazmak Yerine Bir Çerçeve Kullanın
Modern PHP geliştirme genellikle bir çerçeve ile başlamalıdır.
Çerçeveler, yönlendirme, doğrulama, kimlik doğrulaması, veritabanı yönetimi, middleware, hata yönetimi ve proje yapısı ile ilgili konularda yardımcı olur.
Popüler PHP çerçeveleri arasında:
- Laravel
- Symfony
- CodeIgniter
Laravel, modern uygulamalar ve API’ler için yaygın olarak kullanılmaktadır. Symfony, kurumsal düzeyde mimarlık için güçlüdür. CodeIgniter, daha basit uygulamalar veya kolay dağıtım gerektiren projeler için hafif bir çerçevedir.
Bir çerçeve, tekrar eden kodu azaltmaya ve sürdürülebilirliği artırmaya yardımcı olur.
Uygulama Yapınızı Temiz Tutun
PHP projelerinde yaygın bir sorun, her şeyi tek bir dosyada karıştırmaktır: veritabanı sorguları, HTML, iş mantığı, doğrulama ve oturum yönetimi.
Bu, küçük betikler için işe yarayabilir, ancak proje büyüdükçe bakım zorlaşır.
Daha temiz bir PHP uygulaması aşağıdaki gibi ayrı bölümler oluşturmalıdır:
- Routes
- Controllers
- Services
- Models veya repositories
- Views
- Middleware
- Configuration
- Helpers
- API yanıt yönetimi
Örnek yapı:
app/
Controllers/
Services/
Models/
Middleware/
Helpers/
config/
public/
routes/
storage/
vendor/
Bu tür bir yapı, kodun test edilmesini, hata ayıklamasını ve ölçeklenmesini kolaylaştırır.
Veritabanı Sorguları İçin Hazırlanmış İfadeleri Kullanın
SQL enjeksiyonu, web uygulamalarında en yaygın güvenlik risklerinden biridir.
Kullanıcı girdisini doğrudan SQL sorgularına eklemekten kaçının.
Kötü örnek:
$email = $_POST['email'];
$query = "SELECT * FROM users WHERE email=\"$email\"";
Daha iyi bir örnek, PDO hazırlık ifadeleri kullanımı ile:
$email = $_POST['email'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute([
'email' => $email
]);
$user = $stmt->fetch();
Hazırlanmış ifadeler, SQL mantığını kullanıcı girişinden ayırır ve SQL enjeksiyonu riskini azaltır.
Şifreleri Doğru Şekilde Hashleyin
Şifreleri düz metin olarak saklamayın.
PHP, şifreyi hashleme ve doğrulama için yerleşik işlevler sunar.
Şifreyi hashle:
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
Şifreyi doğrula:
if (password_verify($password, $hashedPassword)) {
// Giriş başarılı
}
Bu, MD5 veya SHA1 gibi eski hash yöntemleri yerine daha güvenlidir.
İşlemden Önce Girdileri Doğrulayın
Her giriş untrusted olarak değerlendirilmelidir.
Aşağıdaki kaynaklardan gelen verileri doğrulayın:
- Formlar
- Sorgu dizeleri
- API’ler
- Dosya yüklemeleri
- Çerezler
- Başlıklar
Örnek:
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if (!$email) {
die('Geçersiz e-posta adresi');
}
Doğrulama, hatalı verileri, güvenlik sorunlarını ve beklenmeyen uygulama davranışlarını önlemeye yardımcı olur.
XSS’yi Önlemek İçin Çıkışları Kaçırın
Cross-site scripting, kullanıcı girdisinin doğrudan tarayıcıda render edilmesi durumunda gerçekleşebilir.
Kötü örnek:
echo $_POST['name'];
Daha iyi örnek:
echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
Çıkışları kaçırmak, özellikle kullanıcı tarafından üretilen içerik görüntülenirken oldukça önemlidir.
Oturumlar ve Çerezler için Güvenliği Sağlayın
Oturum güvenliği, giriş tabanlı uygulamalar için önemlidir.
Güvenli çerez ayarlarını kullanın:
session_set_cookie_params([
'lifetime' => 0,
'path' => "https://dev.to/",
'domain' => '',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
session_start();
Ayrıca, giriş sonrası oturum kimliğini yenilemeyi unutmayın:
session_regenerate_id(true);
Bu, oturum sabitleme saldırılarını azaltmaya yardımcı olur.
Formlar İçin CSRF Koruması Kullanın
Uygulamanızda giriş, profil güncellemeleri, şifre değişiklikleri, ödeme işlemleri veya yönetici işlemleri için formlar varsa, CSRF koruması önemlidir.
Basit bir CSRF yaklaşımı:
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
Formda token ekleyin:
Kaynak: Orijinal Makale
- PHP’nin Hala Neden Önemli Olduğu
- Her Şeyi Başlangıçtan Yazmak Yerine Bir Çerçeve Kullanın
- Uygulama Yapınızı Temiz Tutun
- Veritabanı Sorguları İçin Hazırlanmış İfadeleri Kullanın
- Şifreleri Doğru Şekilde Hashleyin
- İşlemden Önce Girdileri Doğrulayın
- XSS’yi Önlemek İçin Çıkışları Kaçırın
- Oturumlar ve Çerezler için Güvenliği Sağlayın
- Formlar İçin CSRF Koruması Kullanın


