0Pricing
PHP Academy · Ders

Kullanıcı Girdisini Temizleme

htmlspecialchars ve filter_input ile tehlikeli karakterleri kaldırın.

Kullanıcı Girdisini Temizleme, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.

Arındırma ve Doğrulama

Doğrulama, verilerin gereksinimleri karşılayıp karşılamadığını kontrol eder (karşılamıyorsa verileri reddeder).
Arındırma, güvenle kullanılabilmeleri için tehlikeli karakterleri kaldırarak veya kodlayarak verileri temizler.

Her ikisi de gereklidir — önce doğrulayın, ardından çıktı için arındırın.

HTML Çıktısı için htmlspecialchars()

XSS'yi önlemek için çıktıyı HTML'ye eklemeden önce her zaman kaçışlayın:

<?php
$name = '<script>alert(1)</script>';

// Dangerous — executes script:
// echo $name;

// Safe:
echo htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// &lt;script&gt;alert(1)&lt;/script&gt;

htmlentities() ve htmlspecialchars() Karşılaştırması

Her ikisi de HTML karakterleri için kaçışlama yapar, ancak htmlentities geçerli olan ALL karakterleri dönüştürür; htmlspecialchars ise yalnızca en tehlikeli beş karakteri dönüştürür:

<?php
$str = '<b>caf&eacute;</b> & "bar"';

// htmlspecialchars: only & < > ' "
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');

// htmlentities: also converts é → &eacute;
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
// Prefer htmlspecialchars — htmlentities can break UTF-8

filter_var FILTER_SANITIZE_*

filter_var arındırma kipleri tehlikeli içeriği ayıklar:

<?php
$rawEmail = 'user(bad)@exam<ple.com';
$clean = filter_var($rawEmail, FILTER_SANITIZE_EMAIL);
echo $clean; // user@example.com

$rawUrl = 'http://exa mple.com/pa th?q=foo bar';
$cleanUrl = filter_var($rawUrl, FILTER_SANITIZE_URL);
echo $cleanUrl;

strip_tags()

Bir dizedeki HTML etiketlerini kaldırın; isterseniz izin verilen etiketleri koruyun:

<?php
$input = '<p>Hello <b>World</b> <script>alert(1)</script></p>';

// Remove all tags:
echo strip_tags($input);
// Hello World alert(1)

// Keep only <b> and <i>:
echo strip_tags($input, '<b><i>');
// Hello <b>World</b>

SQL için Arındırma

SQL'i dize işlevleriyle asla arındırmayın — her zaman hazırlanmış ifadeler kullanın. Doğru yaklaşım:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');

// WRONG — even with addslashes this is dangerous:
// $sql = "SELECT * FROM users WHERE email = '" . addslashes($email) . "'";

// CORRECT — prepared statement:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute([':email' => $email]);
$user = $stmt->fetch();

addslashes() ve Hazırlanmış İfadeler

addslashes() ters eğik çizgileri ve tırnak işaretlerini kaçışlar — ancak SQL için güvenli değildir (NOT). Bunun yerine PDO ile hazırlanmış ifadeler kullanın. addslashes(), JavaScript dizesi oluşturma gibi SQL dışı amaçlar için yine de yararlı olabilir:

<?php
// For embedding PHP string into JavaScript (still escape via json_encode):
$jsData = json_encode(['name' => $userInput], JSON_HEX_QUOT);
echo "<script>var data = $jsData;</script>";

Dosya Adlarını Arındırma

Yüklenen dosya adlarındaki tehlikeli karakterleri ayıklayın:

<?php
function sanitizeFilename(string $name): string {
    // Remove path traversal chars and other dangerous ones
    $name = basename($name);                          // strip any path
    $name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $name); // only safe chars
    $name = preg_replace('/_{2,}/', '_', $name);      // collapse underscores
    return strtolower($name);
}

echo sanitizeFilename('../../../etc/passwd');   // etc_passwd
echo sanitizeFilename('My Photo (1).JPG');      // my_photo_1_.jpg

Kimlikler için Tamsayıya Dönüştürme

Sayısal kimlikler için en basit arındırma yöntemi, tamsayıya dönüştürmektir; bu işlem sayısal olmayan tüm içeriği atar:

<?php
// Never do this:
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = $id";

// Safe approach 1: cast to int
$id = (int) ($_GET['id'] ?? 0);
if ($id <= 0) die('Invalid ID');

// Safe approach 2: validate
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) die('Invalid ID');

Çıktı Bağlamı Önemlidir

Farklı çıktı bağlamları farklı kaçışlama yöntemleri gerektirir:

  • HTML gövdesi → htmlspecialchars()
  • HTML özniteliği → htmlspecialchars(ENT_QUOTES)
  • JSON/JavaScript → json_encode()
  • URL parametresi → urlencode()
  • SQL → hazırlanmış ifadeler

urlencode ve rawurlencode

Değerleri URL'lerde kullanmak üzere kodlayın:

<?php
$search = 'hello world & PHP';

echo urlencode($search);
// hello+world+%26+PHP  (+ for spaces)

echo rawurlencode($search);
// hello%20world%20%26%20PHP  (RFC 3986 — use in paths)

$url = 'https://example.com/search?q=' . urlencode($search);
echo $url;

Hızlı Kontrol

Kullanıcı girdisini bir veritabanı sorgusunda kullanırken SQL enjeksiyonunu önlemenin doğru yolu hangi işlevdir?

Özet: Girdiyi Arındırma

Arındırma kuralları:

  • HTML çıktısı → htmlspecialchars(ENT_QUOTES, 'UTF-8')
  • SQL → hazırlanmış ifadeler, asla dize kaçışlama kullanmayın
  • URL'ler → urlencode() veya rawurlencode()
  • Dosya adları → düzenli ifadeyle ayıklayın, basename() kullanın
  • Tamsayı kimlikler → (int) ile dönüştürün
  • Etiketler → izin verilen etiketleri filtrelemek için strip_tags()

Sıkça Sorulan Sorular

“Kullanıcı Girdisini Temizleme” dersi ücretsiz mi?

Evet — “Kullanıcı Girdisini Temizleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.

“Kullanıcı Girdisini Temizleme” dersinde ne öğreneceğim?

htmlspecialchars ve filter_input ile tehlikeli karakterleri kaldırın. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

PHP Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Kullanıcı Girdisini Temizleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. GET ve POST: Hangisi Ne Zaman Kullanılmalı
  2. Süper Küresellerle Form Verilerini Okuma
  3. Girdi Doğrulama Teknikleri
  4. Kullanıcı Girdisini Temizleme
← PHP Academy Sayfasına Dön