- 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
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!
PHP 8 ve Güvenlik: Kodlarınızı Güçlendirmenizi Sağlayacak 6 Kritik Yenilik
Web geliştirme dünyasında güvenlik, her zaman en öncelikli konulardan biridir. Neyse ki PHP 8, bu konuda bizi yalnız bırakmıyor ve varsayılan olarak daha güvenli kod yazmamızı sağlayan harika yeniliklerle geliyor. Bu özellikler, sık yapılan hataların önüne geçiyor ve yaygın güvenlik açıklarını kapatmamıza yardımcı oluyor.
Gelin, PHP 8'in kodlarımızı nasıl daha sağlam ve zırhlı hale getirdiğine yakından bakalım.
1. Yapıcı Özellik Tanıtımı (Constructor Property Promotion)
Eskiden __construct içinde özellikleri önce public $username; diye tanımlar, sonra da alt satırda $this->username = $username; diye tek tek atardık.
PHP 8'in Constructor Property Promotion özelliği sayesinde artık buna gerek yok. Özellikleri doğrudan yapıcı metodun parametreleri içinde private string $username olarak tanımlayabiliyoruz.
[CODE title="php"]class User
{
public function __construct(
private string $username,
private string $email,
private ?string $password = null
) {
// Artık içi boş!
}
}[/CODE]
Bu, hem kod kalabalığını müthiş azaltıyor hem de bir özelliği başlatmayı (initialize etmeyi) unutma riskimizi ortadan kaldırarak güvenliği doğrudan artırıyor.
2. Null Güvenli Operatör (Nullsafe Operator)
Hepimizin kâbusudur: Bir nesnenin var olup olmadığını kontrol etmeden içinden bir özellik çağırmaya çalışmak ve o meşhur "Fatal Error: null pointer" hatasını almak.
Nullsafe Operatör (?->) işte bu derdi bitiriyor. Artık $user?->getAddress() dediğinizde, eğer $user değişkeni null ise kodunuz patlamak yerine size null döndürür. Zincirleme sorgularda bile güvenle çalışır:
[CODE title="php"]// Eğer $user veya getAddress() null ise, $address null olur, hata vermez.
$address = $user?->getAddress()?->getStreet();[/CODE]
Bu özellik, kodumuzun beklenmedik girdiler karşısında çökmesini engelleyen çok güçlü bir güvenlik kalkanıdır.
3. İsimlendirilmiş Argümanlar (Named Arguments)
Bir fonksiyona 5-6 tane parametre geçtiğinizi düşünün. Hangisi hangisiydi? Hangi sırayla yazılacaktı?İsimlendirilmiş Argümanlar sayesinde artık parametreleri sırasıyla değil, doğrudan isimleriyle gönderebiliyoruz.
[CODE title="php"]// Sıra önemli değil, isimler yeterli:
$result = calculateTotal(quantity: 5, price: 10);[/CODE]
Bu sadece kodun okunurluğunu tavan yaptırmakla kalmıyor, aynı zamanda yanlış sırayla parametre göndermekten kaynaklanabilecek (mesela 'kullanıcı adı' yerine 'şifre' göndermek gibi) kritik güvenlik sorunlarının da önüne geçiyor.
4. Nitelikler (Attributes)
Attributes (Nitelikler), kodumuza üst-veri (metadata) eklememizi sağlayan, #[...] şeklinde kullanılan yeni bir özelliktir. Kendi başlarına bir güvenlik özelliği olmasalar da, güvenlik mekanizmalarını uygulamak için harika bir yol sunarlar.Örneğin, bir fonksiyonun başına aşağıdaki "Attribute"u ekleyerek, o fonksiyona sadece 'admin' yetkisine sahip kişilerin erişebileceğini belirtebiliriz:
[CODE title="php"]#[Route('/admin', ['guard' => 'admin'])]
public function adminDashboard()
{
// ...
}[/CODE]
Bu, güvenlik kurallarını kodun içinde net, okunabilir ve deklaratif bir şekilde tanımlamamızı sağlar.
5. Geliştirilmiş Tür Sistemi (Improved Type System)
PHP 8, tür (type) sistemini çok daha güçlü hale getirdi. Union Types (birleşik türler, örn: int|string) ve strict_types (katı tür denetimi) kullanımı, kodumuzun daha güvenli olmasını sağlıyor.[CODE title="php"]function getUser(int $id): ?User
{
// ...
}[/CODE]
Bir fonksiyona int $id beklerken dışarıdan string bir SQL injection sorgusu gelmesini engellemek gibi. Türleri net bir şekilde belirterek, beklenmedik veri türlerinin uygulamamızın güvenliğini tehlikeye atmasını daha en başından, kod çalışmadan engellemiş oluyoruz.
6. Temel Güvenlik Pratikleri (Unutulmaması Gerekenler)
Elbette, PHP 8'in sunduğu bu harika özellikler, bizim temel güvenlik prensiplerini unutmamız gerektiği anlamına gelmiyor. Geliştiriciler olarak bu pratikleri uygulamaya her zaman devam etmeliyiz:- Input Validation (Girdi Doğrulama): Kullanıcıdan gelen her veriyi doğrulayın ve temizleyin.
- *Output Encoding (Çıktı Kodlama): Ekrana basılan verilerde (özellikle XSS saldırılarına karşı) HTML encoding kullanın.
- SQL Parameterization (Parametreli Sorgular): SQL Injection'dan korunmak için mutlaka PDO veya benzeri sistemlerle parametreli (prepared statements) sorgular kullanın.
- Hassas Veri Güvenliği: Şifreler gibi hassas verileri daima güvenli algoritmalarla (örn: password_hash()) hash'leyerek saklayın.
En Çok Reaksiyon Alan Mesajlar
Paylaşım için teşekkürler
- Katılım
- 24 Ağu 2017
- Konular
- 4,295
- Mesajlar
- 16,377
- Çözüm
- 19
- Online süresi
- 6mo 16d
- Reaksiyon Skoru
- 6,854
- Altın Konu
- 708
- Başarım Puanı
- 439
- MmoLira
- 91,963
- DevLira
- 12
Paylaşım için teşekkürler 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 76
- Cevaplar
- 1
- Görüntüleme
- 52
- Cevaplar
- 2
- Görüntüleme
- 55
- Cevaplar
- 2
- Görüntüleme
- 60
- Cevaplar
- 3
- Görüntüleme
- 67









