CodeBlanks Logo Icon CodeBlanks

Input sanitization

PHP kursu · Uzman · Ders 33/54

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

  1. 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.

  2. 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);
  3. 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

Uzman bölümündeki tüm dersler