CodeBlanks Logo Icon CodeBlanks

htmlspecialchars() ile güvenlik

PHP kursu · Başlangıç · Ders 102/116

htmlspecialchars() ile kullanıcı girdisinden XSS açığını kapatmayı öğrenirsin.

XSS ve htmlspecialchars()

Kullanıcıdan gelen veriyi doğrudan ekrana yazdırmak XSS (Cross-Site Scripting) açığı yaratır. Kötü niyetli biri form alanına <script>alert('kötü')</script> yazarsa, bu doğrudan çalıştırılır. htmlspecialchars() fonksiyonu <, >, &, " ve ' karakterlerini HTML varlıklarına çevirir; böylece tarayıcı metin olarak gösterir, kod olarak çalıştırmaz.

Örnek: echo htmlspecialchars($_POST['name']);. <script> girdisi &lt;script&gt; olarak çıkar; zararsızdır.

ENT_QUOTES bayrağı

htmlspecialchars() varsayılan olarak çift tırnağı " yapar ama tek tırnağa dokunmaz. Tek tırnakları da dönüştürmek için ENT_QUOTES bayrağını verirsin: htmlspecialchars($text, ENT_QUOTES). Böylece hem " hem ' güvenli olur.

Bu özellikle öznitelik içine yazdığın değerler için önemlidir: value="<?php echo htmlspecialchars($name, ENT_QUOTES); ?>". Aksi halde ' onclick='alert(1) gibi bir girdi öznitelikten kaçabilir.

Uygulama htmlspecialchars ile XSS'i engelle

$_POST['comment'] = "<script>alert(1)</script>"; ata. Sonra echo htmlspecialchars($_POST['comment'], ENT_QUOTES); yaz.

Örnek çözümü göster
Önce $_POST['comment'] = "<script>alert(1)</script>"; ata. Sonra echo htmlspecialchars($_POST['comment'], ENT_QUOTES); yaz.
Örnek çözüm:
<?php
// htmlspecialchars ile XSS'i engelle
$_POST['comment'] = "<script>alert(1)</script>";
echo htmlspecialchars($_POST['comment'], ENT_QUOTES);

Kendini test et

  1. htmlspecialchars() ne yapar?

    • Form verisini siler
    • HTML etiketlerini yok eder
    • Formu doğrular
    • Özel karakterleri HTML varlıklarına çevirir
    Cevabı göster

    Özel karakterleri HTML varlıklarına çevirir — Doğru. htmlspecialchars <, >, &, ", ' karakterlerini güvenli HTML varlıklarına çevirir.

  2. Karakteri HTML varlığına eşle

    <
    &lt;
    >
    &gt;
    &
    &amp;
    "
    &quot;
  3. htmlspecialchars ile kaçırma

    echo ____($_POST['comment']);
    Cevabı göster
    echo htmlspecialchars($_POST['comment']);

Başlangıç bölümündeki tüm dersler