Güvenlik İpuçları: PHP ile Web Uygulamalarında Güvenli Programlama Pratikleri
Web uygulamaları, her geçen gün artan siber tehditlere karşı güvenli olmalıdır. PHP ile geliştirilen web uygulamalarında güvenlik, büyük bir öneme sahiptir. Bu makalede, PHP ile web uygulamalarınızı güvenli hale getirmeniz için bazı temel güvenlik pratiklerini inceleyeceğiz.
1. SQL Enjeksiyonlarına Karşı Korumalı Olun
SQL enjeksiyonları, kullanıcı girişlerinin doğru bir şekilde işlenmediği durumlarda ortaya çıkar. Bu saldırı türü, kötü niyetli kullanıcıların SQL sorgularını manipüle etmelerine olanak tanır. Bu tür saldırılardan korunmak için:
Hazır İfadeleri Kullanın:
Kullanıcı girişlerini SQL sorgularında doğrudan kullanmak yerine, PDO veya MySQLi gibi hazır ifadeler kullanarak veritabanı sorgularınızı oluşturun.
php
Copy code
// PDO kullanımı
$stmt = $pdo->prepare("SELECT * FROM kullanıcılar WHERE kullanıcı_adı = :kullanici_ad");
$stmt->bindParam(':kullanici_ad', $kullanici_ad, PDO::PARAM_STR);
$stmt->execute();
Girişleri Filtreleyin ve Doğrulayın:
Kullanıcı girişlerini filtreye alın ve sadece beklenen karakterleri içerdiğinden emin olun.
php
Copy code
$kullanici_ad = filter_var($_POST['kullanici_ad'], FILTER_SANITIZE_STRING);
2. Cross-Site Scripting (XSS) ve Cross-Site Request Forgery (CSRF) Saldırılarından Korunun
XSS Saldırılarına Karşı:
Kullanıcı girişlerini güvenli bir şekilde göstermek için htmlspecialchars veya htmlentities gibi fonksiyonları kullanın.
php
Copy code
echo htmlspecialchars($kullanici_girdisi, ENT_QUOTES, 'UTF-8');
CSRF Saldırılarına Karşı:
Formlarınıza rastgele oluşturulan bir token ekleyerek, sadece bu token ile form gönderimlerinin geçerli olmasını sağlayın.
php
Copy code
// Form oluştururken
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
// Form gönderimini kontrol ederken
if ($_POST['csrf_token'] === $_SESSION['csrf_token']) {
// Doğrulama başarılı
} else {
// CSRF saldırısı algılandı
}
3. Güvenlik Duvarları ve Saldırı İzleme Kullanın
Fail2Ban veya DenyHosts Kullanın:
Brute force saldırılarına karşı, kullanıcı adı ve şifre kombinasyonlarına sık sık yanlış giriş yapılması durumunda IP'leri engelleyen bir araç kullanın.
Güvenlik Duvarları İle Erişim Kontrolü:
Sunucunuzdaki güvenlik duvarları ile sadece belirli IP adreslerinden gelen trafiğe izin verin.
4. Veri Doğrulama ve Filtreleme
Girişleri Doğrulayın:
Kullanıcı girişlerini doğrulayarak beklendiği gibi formatlanmış veri alın.
Filtreleme İle Zararlı İçerikleri Engelleme:
Veritabanına veya web sayfasına gönderilecek içerikleri filtreleyerek zararlı içerikleri engelleyin.
php
Copy code
$kullanici_ad = filter_var($_POST['kullanici_ad'], FILTER_SANITIZE_STRING);
5. Güvenli Parola Depolama ve İletişimi Şifreleme
Parolaları Şifreleyin:
Parolaları düz metin olarak değil, örneğin bcrypt veya Argon2 gibi güvenli şifreleme algoritmaları kullanarak depolayın.
php
Copy code
$hashed_password = password_hash($plain_password, PASSWORD_BCRYPT);
SSL/TLS Kullanın:
Veri iletimini şifrelemek için SSL veya TLS kullanın, özellikle kullanıcı girişlerini veya özel verileri aktardığınızda.
Bu güvenlik önlemleri, PHP ile web uygulamalarının temel güvenlik zafiyetlerini azaltmaya yardımcı olabilir. Ancak, güvenlik sürekli bir süreçtir ve en son güvenlik güncellemelerini takip etmek önemlidir. Ayrıca, uygulamanızı düzenli olarak güvenlik testlerine tabi tutmak da önemlidir.