
PHP Süper Globaller: $_GET, $_POST, $_SESSION ve $_SERVER
Süper globaller, betiğin her noktasından ek tanımlama yapmadan erişilebilen dizilerdir. Kapsam kuralları bunlara uygulanmaz; fonksiyon içinde de doğrudan okunabilirler. Pratikte en önemli ortak özellikleri şudur: büyük bölümü doğrudan kullanıcıdan gelir ve hiçbiri güvenilir veri kaynağı değildir.
$_GET ve $_POST
$_GET adres satırındaki sorgu parametrelerini, $_POST istek gövdesindeki form alanlarını taşır. Adres satırı tarayıcı geçmişinde ve sunucu kayıtlarında göründüğü için parola gibi veriler asla GET ile taşınmaz.
$sayfa = (int) ($_GET['sayfa'] ?? 1);
$arama = trim($_GET['q'] ?? '');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$eposta = trim($_POST['eposta'] ?? '');
}Var olmayan anahtara erişim uyarı ürettiği için null birleştirme operatörü ile varsayılan değer verilir. Sayısal beklenen alanlarda tip dönüşümü yapmak, sonraki adımlarda beklenmeyen değerlerin dolaşmasını engeller.
$_SERVER ve güvenilmeyecek alanlar
$_SERVER hem sunucudan hem istemciden gelen bilgileri bir arada tutar. Ayrımı bilmek önemlidir: HTTP ile başlayan alanların tamamı istemci tarafından gönderilir ve serbestçe değiştirilebilir.
HTTP_USER_AGENT,HTTP_REFERER,HTTP_HOST: istemci belirler, doğrulanmadan kullanılmaz.REQUEST_METHOD,REQUEST_URI: yönlendirme kararları için kullanılabilir, ancak içeriği yine kullanıcıdan gelir.REMOTE_ADDR: sunucunun gördüğü bağlantı adresi, güvenilirdir. Vekil sunucu arkasında ise doğru değer ancak vekil yapılandırmasına güvenildiğinde elde edilir.
Adres tabanlı yönlendirmede HTTP_HOST yerine yapılandırmada tanımlı sabit alan adı kullanılmalıdır. Aksi halde saldırgan gönderdiği başlıkla üretilen bağlantıları kendi alan adına yönlendirebilir.
$_SESSION ve oturum güvenliği
Oturum verisi sunucuda tutulur, tarayıcıda yalnızca oturum kimliği bulunur. Bu kimliğin ele geçirilmesi oturumun devralınması anlamına geldiği için giriş sonrasında kimliğin yenilenmesi zorunludur:
session_start();
// başarılı giriş sonrası
session_regenerate_id(true);
$_SESSION['kullanici_id'] = $kullanici['id'];
// çıkış
$_SESSION = [];
session_destroy();Oturum çerezinin ayarları oturum başlatılmadan önce yapılandırılır. Bu ayarlar çerezin betiklerden okunmasını ve alan adı dışına gönderilmesini engeller:
session_set_cookie_params([
'httponly' => true,
'secure' => true,
'samesite' => 'Lax',
]);
session_start();$_COOKIE
Çerezler tamamen kullanıcı tarafında saklandığı için içeriklerine güvenilmez. Yetki bilgisi çerezde tutulmaz; çerez yalnızca sunucudaki kaydı işaret eden bir anahtar taşır. Çerez yazarken de aynı güvenlik bayrakları verilir:
setcookie('tema', 'koyu', [
'expires' => time() + 86400 * 30,
'path' => '/',
'httponly' => true,
'secure' => true,
'samesite' => 'Lax',
]);$_FILES ve filter_input
Yüklenen dosyalar $_FILES dizisinde gelir. Dizideki tür bilgisi tarayıcı tarafından gönderildiği için doğrulama amacıyla kullanılmaz; içerik sunucuda ayrıca incelenmelidir. Dosya yükleme ayrıntıları serinin son yazısında ele alınıyor.
Girdileri okurken filter_input kullanmak, okuma ve doğrulamayı tek adımda birleştirir. Beklenen biçime uymayan değer için false döner:
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$eposta = filter_input(INPUT_POST, 'eposta', FILTER_VALIDATE_EMAIL);
if ($id === false || $id === null) {
http_response_code(400);
exit;
}Oturum verisi nerede tutulur?
Oturum verisi varsayılan olarak sunucudaki geçici dizine dosya biçiminde yazılır. Bu dizin işletim sistemi tarafından düzenli aralıklarla temizlendiği için, oturumların beklenenden erken düşmesinin en yaygın nedeni budur. Ömür süresi yapılandırmadan ayarlanır.
Birden fazla sunucuya dağıtılan uygulamalarda dosya tabanlı saklama sorun çıkarır: kullanıcı ikinci sunucuya düştüğünde oturumu bulunamaz. Bu durumda oturum verisi ortak bir depoya, örneğin veritabanına ya da bellek içi bir önbelleğe taşınır.
Süper globalleri koda yaymamak
Süper globallere her noktadan erişilebilmesi pratik görünür, ancak kodun her yerine dağıldıklarında iki sorun çıkar. Birincisi, bir değerin nereden geldiği izlenemez hale gelir. İkincisi, test yazmak zorlaşır; çünkü fonksiyonun davranışı parametrelerine değil ortama bağlı olur.
Çözüm, girdileri tek bir noktada okuyup fonksiyonlara parametre olarak geçmektir. Küçük bir yardımcı bile bu dağılmayı büyük ölçüde engeller:
function istekDegeri(string $anahtar, ?string $varsayilan = null): ?string
{
$deger = $_POST[$anahtar] ?? $_GET[$anahtar] ?? null;
return is_string($deger) ? trim($deger) : $varsayilan;
}
// iş mantığı süper globali hiç görmez
kayitOlustur(istekDegeri('ad'), istekDegeri('eposta'));Kontrol listesi
- Süper globaller doğrudan kullanılmaz, önce doğrulanır.
- Parola ve belirteç gibi veriler adres satırında taşınmaz.
- Giriş sonrasında oturum kimliği yenilenir.
- Oturum ve çerezlerde httponly, secure ve samesite ayarlanır.
- HTTP ile başlayan $_SERVER alanları doğrulanmadan karara dahil edilmez.
PHP eğitim serisi
Bu yazı, temel sözdiziminden üretim ortamına kadar ilerleyen 25 bölümlük serinin bir parçası. Bölümler sırayla okunacak biçimde hazırlandı, ancak her biri tek başına da kullanılabilir.
Temeller
- Kurulum ve temel sözdizimi
- Döngüler ve akış kontrolü
- Diziler
- Fonksiyonlar
- String fonksiyonları
- Süper globaller (bu yazı)
- Form işleme
- Dosya işlemleri
Dilin ayrıntıları
Nesne yönelimli PHP
- Sınıf ve nesne
- Kalıtım, arayüz ve trait
- Statik üyeler, sabitler ve enum
- Namespace, Composer ve autoload
Veri ve güvenlik
- PDO ile veritabanı işlemleri
- Oturum yönetimi ve kimlik doğrulama
- Güvenli çıktı ve XSS
- JSON ile veri değişimi
Dış dünya ve üretim
Yorumlar
İlk yorumu sen yap.
İlgili Yazılar

PHP Uygulamasını Üretime Almak: Yapılandırma ve Güvenlik
Geliştirme makinesinde çalışan kod ile üretimde güvenle çalışan kod arasındaki fark yapılandırmadır. Ayarlar, izinler, dağıtım akışı ve son kontroller.

PHP ile REST API Yazmak: Yönlendirme ve HTTP Durum Kodları
Bir API'nin kalitesi çoğunlukla ayrıntılarda belli olur: doğru durum kodu, tutarlı hata biçimi ve öngörülebilir adresler. Saf PHP ile uçtan uca kurulum.

PHPUnit ile Birim Test Yazmak: Kurulum, Sahte Nesneler ve Kapsam
Testin amacı hata bulmak değil, değişikliği güvenle yapabilmektir. Kurulum, ilk test, sahte nesneler ve test edilebilir kodun özellikleri.