CodeBlanks Logo Icon CodeBlanks

XSS korunması

PHP kursu · İleri seviye · Ders 63/92

htmlspecialchars() ve çıktı kaçışıyla XSS saldırısından korunmayı öğrenirsin.

XSS nedir?

XSS (cross-site scripting), saldırganın sayfaya JavaScript veya HTML enjekte etmesidir. Kullanıcıdan gelen veriyi echo ile kaçışlamadan yazdırırsan, kötü amaçlı <script> çalışır ve oturum çalıebilir.

Korunma: tarayıcıya giden tüm çıktıyı htmlspecialchars() ile kaçışla. Bu fonksiyon <, >, tırnaklar ve & işaretini HTML varlıklarına çevirir; tarayıcı bunları metin olarak gösterir, kod olarak çalıştırmaz.

ENT_QUOTES ve ENT_HTML5

Varsayılan olarak htmlspecialchars() yalnızca çift tırnağı kaçışlar. Tek tırnak da öznitelik değerlerinde tehlikeli olabilir. ENT_QUOTES bayrağı ile her iki tırnak tipini de dönüştürürsün.

ENT_HTML5 ise HTML5'e uygun varlıkları kullanır. Üçüncü argüman olarak "UTF-8" vermek encoding'i netleştirir. Modern projelerde her zaman ENT_QUOTES | ENT_HTML5 kullanmak en güvenli seçimdir.

Uygulama Kullanıcı girdisini güvenle yazdır

$userInput içinde kötü amaçlı bir script etiketi var. htmlspecialchars ile kaçışla; ikinci argüman ENT_QUOTES | ENT_HTML5, üçüncü argüman "UTF-8" olsun. Sonucu $safe'e ata ve echo ile yazdır.

Örnek çözümü göster
$safe = htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8"); yaz. Sonra echo $safe . "\n"; ile yazdır.
Örnek çözüm:
<?php
$userInput = '<script>alert("xss")</script>';
$safe = htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
echo $safe . "\n";

Kendini test et

  1. htmlspecialchars çağrısını tamamla

    $safe = ____($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
    Cevabı göster
    $safe = htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
  2. XSS kavramlarını eşleştir

    htmlspecialchars
    Özel karakterleri kaçışlar
    ENT_QUOTES
    Tek ve çift tırnak
    ENT_HTML5
    HTML5 karakter seti
    echo
    Çıktı verir
  3. Hangisi hem tek hem çift tırnağı kaçışlar?

    • htmlspecialchars($s)
    • htmlspecialchars($s, ENT_COMPAT)
    • htmlspecialchars($s, ENT_NOQUOTES)
    • htmlspecialchars($s, ENT_QUOTES)
    Cevabı göster

    htmlspecialchars($s, ENT_QUOTES) — Doğru. ENT_QUOTES her iki tırnak tipini de dönüştürür.

İleri seviye bölümündeki tüm dersler