Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP 8 ile Güvenli Kodlama: En Sinsi 10 Düşman ve Savunma Yöntemleri

Karadayı ✓

Karadayı ✓
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Uzman
Ayın Üyesi
Katılım
21 May 2024
Konular
1,450
Mesajlar
2,451
Çözüm
7
Online süresi
3mo 25d
Reaksiyon Skoru
2,564
Altın Konu
1,027
Başarım Puanı
274
Yaş
51
MmoLira
36,853
DevLira
110
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

turkmmo.png

PHP 8 ile Güvenli Kodlama: En Sinsi 10 Düşman ve Savunma Yöntemleri


PHP 8 ile uygulama geliştirmek harika, ancak güvenlik her zaman birinci önceliğimiz olmalı. Kod yazmak bir kale inşa etmeye benzer; eğer sık karşılaşılan saldırı yöntemlerini bilmez ve savunma yapmazsanız, o kale mutlaka düşer.

Gelin, en yaygın 10 güvenlik açığına ve bunlara karşı PHP 8 ile nasıl kalkan oluşturacağımıza bakalım.

1. SQL Injection (SQLi)

Bu, bir saldırganın, giriş alanlarına (input) normal veri yerine kötü niyetli SQL sorguları enjekte etmesidir.

Savunma: ASLA ama ASLA kullanıcıdan gelen veriyi doğrudan SQL sorgusuna eklemeyin. Her zaman PDO ve parametreli sorgular (prepared statements) kullanın.

[CODE title="php"]// Kullanıcıdan gelen veri
$userInput = $_POST['user_input'];

// Veriyi sorguya :username gibi bir "yer tutucu" ile bağlayın
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $userInput, PDO::PARAM_STR);
$stmt->execute();[/CODE]

PDO, veriyi sorgudan ayırarak saldırganın komut çalıştırmasını engeller.

2. Cross-Site Scripting (XSS)

Saldırganın, siteniz aracılığıyla diğer kullanıcıların tarayıcısında zararlı JavaScript kodları çalıştırmasıdır. (Örn: Bir yorum alanına <script>... kodu yazması).

Savunma: Kullanıcıdan gelen veriyi ekrana basarken mutlaka htmlspecialchars fonksiyonundan geçirin.

[CODE title="php"]$userInput = $_POST['user_input'];

// Gelen veriyi HTML etiketlerini zararsız metne dönüştürerek temizle
$cleanInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

// Ekrana güvenle bas
echo "<p>Güvenli çıktı: $cleanInput</p>";[/CODE]

Bu, <script> etiketinin tarayıcı tarafından çalıştırılmasını engeller, onu metin olarak gösterir.

3. Cross-Site Request Forgery (CSRF)

Kullanıcıyı kandırarak, onun haberi olmadan (onun oturumuyla) sitenizde istenmeyen işlemler (örn: şifre değiştirme, hesap silme) yaptırma saldırısıdır.

Savunma: Her form işlemi için benzersiz, gizli bir "CSRF token" kullanın.

[CODE title="php"]// Token'ı oluştur ve oturuma kaydet
$token = bin2hex(random_bytes(32)); // Güvenli token üret
$_SESSION['csrf_token'] = $token;

// Formda gizli bir input ile gönder
// <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">

// ---

// Sunucu tarafında kontrol et
if ($_POST['csrf_token'] === $_SESSION['csrf_token']) {
// Token geçerli, işlem yap
} else {
// Token geçersiz! Saldırı olabilir.
}[/CODE]

4. Zayıf Kimlik Doğrulama ve Yetkilendirme

Kullanıcı şifrelerini düz metin saklamak veya "admin" sayfalarını yetkisiz erişime açık bırakmak.

Savunma: Şifreler için mutlaka password_hash() kullanın (önceki konumuzda işlemiştik). Yetkilendirme için Rol Tabanlı Erişim Kontrolü (RBAC) sistemleri kurun ve her sayfada kullanıcının yetkisini (örn: $_SESSION['role'] == 'admin') kontrol edin.

5. Hatalı Hata Yönetimi

Kullanıcıya "Veritabanı bağlantı hatası: Kullanıcı 'root' şifresi yanlış..." gibi detaylı hata mesajları göstermek. Bu, saldırgana sistem hakkında hayati bilgiler verir.

Savunma: Sunucu (production) ortamında hata gösterimini kapatın. Hataları kullanıcıya göstermek yerine, sunucuda gizli bir dosyaya kaydedin.

[CODE title="php"]// Bu ayarlar production sunucusunda olmalı
ini_set('display_errors', 0);
ini_set('log_errors', 1);[/CODE]

Kullanıcıya sadece "Beklenmedik bir hata oluştu, lütfen daha sonra tekrar deneyin." gibi genel bir mesaj gösterin.

6. Zayıf Oturum Yönetimi

Tahmin edilebilir oturum kimlikleri kullanmak veya session_regenerate_id() kullanmamak.

Savunma: (Önceki konumuzda detaylıca işledik) Oturum çerezlerini mutlaka Secure ve HttpOnly olarak ayarlayın. Kullanıcı giriş yaptığında session_regenerate_id(true); komutunu çağırarak ona yeni bir oturum kimliği verin.

7. Güvensiz Dosya Yükleme

Kullanıcının .php veya .exe gibi zararlı dosyalar yüklemesine izin vermek.

Savunma:

  1. Sadece izin verilen dosya türlerine (örn: image/jpeg, image/png) ve boyutlarına izin verin.
  2. Yüklenen dosyaya random_bytes() ile oluşturulmuş benzersiz bir isim verin.
  3. Dosyaları ASLA public_html (web root) içine değil, bir üst dizine kaydedin ve özel bir script ile güvenli bir şekilde sunun.

8. Düzenli Güncellemelerin İhmal Edilmesi

Eski bir PHP sürümü, eski bir web sunucusu (Apache/Nginx) veya güncellenmemiş composer kütüphaneleri kullanmak.

Savunma: Güvenlik açıkları sürekli keşfedilir. composer update komutunu düzenli çalıştırın, PHP ve sunucu yazılımlarınızı daima en son kararlı (stable) sürüme güncelleyin.

9. Güvenlik Denetimlerinin Eksikliği

"Kod çalışıyorsa dokunma" mantığı.

Savunma: Kodunuzu düzenli olarak güvenlik denetimlerinden (audit) geçirin. Otomatik tarama araçları kullanın ve mümkünse sızma testleri (penetration testing) yaptırın.

10. Güvenlik Başlıklarının (Security Headers) Kullanılmaması

Tarayıcıya ekstra güvenlik katmanları ekleyen HTTP başlıklarını (header) göndermemek.

Savunma: Sunucu yapılandırmanızda veya PHP kodunuzda şu başlıkları ekleyin:

  • Content-Security-Policy (CSP): Sitede hangi kaynakların (script, stil) çalıştırılabileceğini sınırlar (XSS'e karşı çok etkilidir).
  • Strict-Transport-Security (HSTS): Tarayıcıyı sadece HTTPS kullanmaya zorlar.
  • X-Content-Type-Options: Tarayıcının dosya türlerini "koklamasını" engeller.
Güvenlik bir hedef değil, asla bitmeyen bir yolculuktur.
 

En Çok Reaksiyon Alan Mesajlar

Paylaşım için teşekkürler.
 
Eline sağlık! Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst