PHP Eğitimi

PHP ANA SAYFA PHP'ye Giriş PHP Kurulumu PHP Sözdizimi PHP Yorumları PHP Değişkenleri PHP Yankı / Yazdır PHP Veri Türleri PHP Dizeleri PHP Numaraları PHP Matematik PHP Sabitleri PHP Operatörleri PHP If...Else...Elseif PHP Anahtarı PHP Döngüleri PHP Fonksiyonları PHP Dizileri PHP Süper Küreseller PHP Normal İfade

PHP Formları

PHP Form İşleme PHP Form Doğrulama PHP Formu Gerekli PHP Formu URL/E-posta PHP Formu Tamamlandı

PHP Gelişmiş

PHP Tarih ve Saat PHP Dahil PHP Dosya İşleme PHP Dosyası Aç/Oku PHP Dosyası Oluştur/Yaz PHP Dosya Yükleme PHP Çerezleri PHP Oturumları PHP Filtreleri PHP Filtreleri Gelişmiş PHP Geri Çağırma İşlevleri PHP JSON'u PHP İstisnaları

PHP OOP

PHP OOP nedir PHP Sınıfları/Nesneleri PHP Oluşturucu PHP Yıkıcı PHP Erişim Değiştiricileri PHP Kalıtımı PHP Sabitleri PHP Soyut Sınıfları PHP Arayüzleri PHP Özellikleri PHP Statik Yöntemler PHP Statik Özellikler PHP Ad Alanları PHP Yinelenebilirler

MySQL Veritabanı

MySQL Veritabanı MySQL Bağlantısı MySQL Veritabanı Oluştur MySQL Tablo Oluştur MySQL Veri Ekle MySQL Son Kimliği Al MySQL Ekle Çoklu MySQL Hazırlandı MySQL Seçim Verisi MySQL Nerede MySQL Sıralaması MySQL Verileri Sil MySQL Güncelleme Verileri MySQL Sınır Verileri

PHP XML'i

PHP XML Ayrıştırıcıları PHP SimpleXML Ayrıştırıcı PHP SimpleXML - Al PHP XML Expat'ı PHP XML DOM'si

PHP - AJAX

AJAX'a Giriş AJAX PHP AJAX Veritabanı AJAX XML'i AJAX Canlı Arama AJAX Anketi

PHP Örnekleri

PHP Örnekleri PHP Derleyici PHP Testi PHP Alıştırmaları PHP Sertifikası

PHP Referansı

PHP'ye Genel Bakış PHP Dizisi PHP Takvimi PHP Tarihi PHP Dizini PHP Hatası PHP İstisnası PHP Dosya Sistemi PHP Filtresi PHP FTP'si PHP JSON'u PHP Anahtar Kelimeler PHP Libxml PHP Postası PHP Matematik PHP Çeşitli PHP MySQLi PHP Ağı PHP Çıkış Kontrolü PHP Normal İfade PHP SimpleXML PHP Akışı PHP Dizisi PHP Değişken İşleme PHP XML Ayrıştırıcı PHP Posta Kodu PHP Saat Dilimleri

PHP Form Doğrulama


Bu ve sonraki bölümler, form verilerini doğrulamak için PHP'nin nasıl kullanılacağını gösterir.


PHP Form Doğrulama

PHP formlarını işlerken GÜVENLİK düşünün!

Bu sayfalar, PHP formlarının güvenlik göz önünde bulundurularak nasıl işleneceğini gösterecektir. Form verilerinin doğru şekilde doğrulanması, formunuzu bilgisayar korsanlarından ve spam göndericilerden korumak için önemlidir!

Bu bölümlerde üzerinde çalışacağımız HTML formu çeşitli giriş alanları içerir: zorunlu ve isteğe bağlı metin alanları, radyo düğmeleri ve bir gönder düğmesi:

Yukarıdaki form için doğrulama kuralları aşağıdaki gibidir:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

İlk önce formun düz HTML koduna bakacağız:



Metin Alanları

Ad, e-posta ve web sitesi alanları metin giriş öğeleridir ve yorum alanı bir metin alanıdır. HTML kodu şöyle görünür:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radyo Düğmeleri

Cinsiyet alanları radyo düğmeleridir ve HTML kodu şöyle görünür:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Form Öğesi

Formun HTML kodu şöyle görünür:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Form gönderildiğinde, form verileri method="post" ile gönderilir.

$_SERVER["PHP_SELF"] değişkeni nedir?

$_SERVER["PHP_SELF"], o anda yürütülmekte olan komut dosyasının dosya adını döndüren süper global bir değişkendir.

Böylece, $_SERVER["PHP_SELF"], gönderilen form verilerini farklı bir sayfaya atlamak yerine sayfanın kendisine gönderir. Bu şekilde kullanıcı, formla aynı sayfada hata mesajları alacaktır.

htmlspecialchars() işlevi nedir?

htmlspecialchars() işlevi, özel karakterleri HTML varlıklarına dönüştürür. Bu, < ve > gibi HTML karakterlerini < ile değiştireceği anlamına gelir. ve >. Bu, saldırganların formlara HTML veya Javascript kodu (Siteler Arası Komut Dosyası Çalıştırma saldırıları) enjekte ederek kodu kullanmasını engeller.


PHP Form Güvenliği Üzerine Büyük Not

$_SERVER["PHP_SELF"] değişkeni bilgisayar korsanları tarafından kullanılabilir!

Sayfanızda PHP_SELF kullanılıyorsa, kullanıcı eğik çizgi (/) girebilir ve ardından yürütmek için bazı Siteler Arası Komut Dosyası (XSS) komutları girebilir.

Siteler arası komut dosyası çalıştırma (XSS), genellikle Web uygulamalarında bulunan bir tür bilgisayar güvenlik açığıdır. XSS, saldırganların diğer kullanıcılar tarafından görüntülenen Web sayfalarına istemci tarafı komut dosyası eklemesine olanak tanır.

"test_form.php" adlı bir sayfada aşağıdaki formun olduğunu varsayalım:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Şimdi, bir kullanıcı adres çubuğuna "http://www.example.com/test_form.php" gibi normal URL'yi girerse, yukarıdaki kod şuna çevrilir:

<form method="post" action="test_form.php">

Çok uzak çok iyi.

Ancak, bir kullanıcının adres çubuğuna aşağıdaki URL'yi girdiğini düşünün:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

Bu durumda, yukarıdaki kod şu dile çevrilecektir:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Bu kod, bir komut dosyası etiketi ve bir uyarı komutu ekler. Ve sayfa yüklendiğinde JavaScript kodu yürütülür (kullanıcı bir uyarı kutusu görür). Bu PHP_SELF değişkeninden nasıl yararlanılabileceğine dair basit ve zararsız bir örnektir.

Herhangi bir JavaScript kodunun <script> etiketinin içine eklenebileceğini unutmayın ! Bir bilgisayar korsanı, kullanıcıyı başka bir sunucudaki bir dosyaya yönlendirebilir ve bu dosya, örneğin, kullanıcı verilerini kaydetmek için genel değişkenleri değiştirebilen veya formu başka bir adrese gönderebilen kötü amaçlı kod içerebilir.


$_SERVER["PHP_SELF"] İstismarlarından Nasıl Kaçınılır?

$_SERVER["PHP_SELF"] istismarlarından htmlspecialchars() işlevi kullanılarak kaçınılabilir.

Form kodu şöyle görünmelidir:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() işlevi, özel karakterleri HTML varlıklarına dönüştürür. Şimdi, kullanıcı PHP_SELF değişkeninden yararlanmaya çalışırsa, aşağıdaki çıktıyla sonuçlanacaktır:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

İstismar girişimi başarısız olur ve hiçbir zararı olmaz!


PHP ile Form Verilerini Doğrulayın

Yapacağımız ilk şey, tüm değişkenleri PHP'nin htmlspecialchars() işlevinden geçirmek.

htmlspecialchars() fonksiyonunu kullandığımızda; o zaman bir kullanıcı aşağıdakileri bir metin alanına göndermeye çalışırsa:

<script>location.href('http://www.hacked.com')</script>

- bu yürütülmez, çünkü aşağıdaki gibi HTML çıkışlı kod olarak kaydedilir:

<script>location.href('http://www.hacked.com')</script>

Kodun bir sayfada veya e-postada görüntülenmesi artık güvenlidir.

Kullanıcı formu gönderdiğinde ayrıca iki şey daha yapacağız:

  1. Kullanıcı giriş verilerinden gereksiz karakterleri (fazladan boşluk, sekme, yeni satır) çıkarın (PHP trim() işleviyle)
  2. Kullanıcı giriş verilerinden ters eğik çizgileri (\) kaldırın (PHP stripslashes() işleviyle)

Bir sonraki adım, tüm kontrolleri bizim için yapacak bir fonksiyon oluşturmaktır (bu, aynı kodu tekrar tekrar yazmaktan çok daha uygundur).

Test_input() fonksiyonunu isimlendireceğiz.

Şimdi, test_input() işleviyle her bir $_POST değişkenini kontrol edebiliriz ve komut dosyası şöyle görünür:

Örnek

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Komut dosyasının başlangıcında, formun $_SERVER["REQUEST_METHOD"] kullanılarak gönderilip gönderilmediğini kontrol ettiğimize dikkat edin. REQUEST_METHOD POST ise, form gönderildi - ve doğrulanması gerekiyor. Gönderilmediyse, doğrulamayı atlayın ve boş bir form görüntüleyin.

Ancak yukarıdaki örnekte tüm giriş alanları isteğe bağlıdır. Kullanıcı herhangi bir veri girmese bile komut dosyası düzgün çalışır.

Sonraki adım, gerekli girdi alanlarını yapmak ve gerekirse hata mesajları oluşturmaktır.