PHP
Input sanitization
filter_input() ve filter_var() ile girdiyi temizleyip doğrulamayı öğrenirsin.
filter_input ne işe yarar?
filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL) dış girdiyi alır, doğrular ve temizler. filter_var ise elinizdeki değer üzerinde aynı süzgeci uygular. FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_INT gibi doğrulama süzgeçleri yanlış formatta false döner.
FILTER_SANITIZE_STRING, FILTER_SANITIZE_SPECIAL_CHARS ise tehlikeli karakterleri kaçışlar. Süzgeç sonucunu her zaman === false ile denetle; empty() yanlış negatif verir (0 veya "0" geçerli değer olabilir). Dış kaynak için filter_input, elinizdeki için filter_var kullan.
hash_hmac ile imzalı girdi
Önemli girdileri (sıralama kimliği, geri çağırma URL'si) imzalamak için hash_hmac kullanılır. $mac = hash_hmac("sha256", $data, $key) ile HMAC üretirsin; alıcı aynı anahtarla yeniden hesaplayıp hash_equals($mac, $expected) ile karşılaştırır.
hash_equals sabit süreli çalışır; == yerine her zaman bu kullanılır. hash fonksiyonu anahtarsız çalışır; bütünlük değil yalnızca özet üretir. Anahtar ($key) sunucuda gizli tutulmalı, URL'ye konmamalıdır. HMAC değişikliği tespit ettiği için girdi bütünlüğü garanti edilir.
Uygulama filter_var + hash_hmac ile doğrula ve imzala
filterAndSign($email, $key) fonksiyonu tanımla. İçinde filter_var($email, FILTER_VALIDATE_EMAIL) çağır; false ise boş dize döndür. true ise hash_hmac("sha256", $email, $key) ile $mac hesapla ve $mac döndür. $key zaten tanımlı. filterAndSign("user@example.com", $key) ve filterAndSign("not-email", $key) çağır; her sonucun strlen değerini yazdır.
Örnek çözümü göster
function filterAndSign($email, $key) { if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { return ""; } return hash_hmac("sha256", $email, $key); } yaz. "user@example.com" geçerli → hash_hmac sha256 = 64 hex karakter → strlen 64. "not-email" geçersiz → boş dize → strlen 0.
Örnek çözüm:
<?php
$key = "sunucu-gizli-anahtari";
function filterAndSign($email, $key) {
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
return "";
}
return hash_hmac("sha256", $email, $key);
}
echo strlen(filterAndSign("user@example.com", $key)) . "\n";
echo strlen(filterAndSign("not-email", $key)) . "\n";
Kendini test et
-
E-posta doğrulamak için hangi süzgeç kullanılır?
- FILTER_SANITIZE_STRING
- FILTER_VALIDATE_EMAIL
- FILTER_VALIDATE_INT
- FILTER_SANITIZE_NUMBER_INT
Cevabı göster
FILTER_VALIDATE_EMAIL — Doğru. FILTER_VALIDATE_EMAIL e-posta biçimini doğrular.
-
filter_var çağrısını tamamla
$email = "user@example.com";
$valid = ____($email, FILTER_VALIDATE_EMAIL);
Cevabı göster
$email = "user@example.com";
$valid = filter_var($email, FILTER_VALIDATE_EMAIL);
-
Girdi doğrulama kavramlarını eşleştir
- filter_var
- Değeri süzgeçten geçirir
- FILTER_VALIDATE_EMAIL
- E-posta biçimi
- hash_hmac
- HMAC üretir
- hash_equals
- Sabit süreli karşılaştırma
Sıradaki ders: Secure file upload