PHP Filtre (Filter)
- Önceki Sayfa PHP İstisna
- Sonraki Sayfa MySQL Tanıtımı
PHP filtreleri, örneğin kullanıcı girişleri gibi güvenli olmayan kaynaklardan gelen verileri doğrulamak ve filtrelemek için kullanılır.
PHP filtreleri nedir?
PHP filtreleri, güvenli olmayan kaynaklardan gelen verileri doğrulamak ve filtrelemek için kullanılır.
Kullanıcı girişleri veya özelleştirilmiş verileri doğrulamak ve filtrelemek, her Web uygulamasının önemli bir bileşenidir.
PHP'nin filtre eklentisini tasarım amacı, veri filtrelemeyi daha kolay ve hızlı hale getirmektir.
Neden filtre kullanılır?
Hemen hemen tüm web uygulamaları harici girişlere bağımlıdır. Bu veriler genellikle kullanıcılar veya diğer uygulamalar (örneğin, web hizmetleri) tarafından gelmektedir. Filtreler kullanarak, uygulamanın doğru giriş türünü almasını sağlayabilirsiniz.
Daima dürdı verileri filtrelemelisiniz!
Girdi filtreleme, en önemli uygulama güvenlik konularından biridir.
Dürdı girdi nedir?
- Formdan gelen girdi verileri
- Kahvecikler
- Sunucu değiyeleri
- Veritabanı sorgu sonucu
Fonksiyon ve filtreler
Değiyeyi filtrelemek için ağırlı bir filtre fonksiyonundan birini kullanın
- filter_var() - Belirli bir filtre ile tek bir değiyeyi filtreler
- filter_var_array() - Aynı veya farklı filtrelerle birden fazla değiyeyi filtreler
- filter_input - Bir girdi değiyeyi alır ve onu filtreler
- filter_input_array - Birden fazla girdi değiyeyi alır ve onları aynı veya farklı filtrelerle filtreler
Açağırında, biz "filter_var()" fonksiyonu ile bir tamsayıyı onaylad႒ız:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Tamsayı geçerli değil"); } else { echo("Tamsayı geçerli"); } ?>
Yukarıdaki kod "FILTER_VALIDATE_INT" filtreçini kullanarak değiyeyi filtreledi. Bu tamsayı geçerli olduğından, kodun çıktısı: "Tamsayı geçerli".
Eğılmek istenen bir tamsayı deği bir değiyette kullanmaya calırsak, çıktı: "Tamsayı geçerli değil".
Tam fonksiyon ve filtre listesi için bizim PHP Filtre Referans Kılavuzu.
Onaylama ve Temizleme
İki filtre var:
Onaylama filtreleri:
- Kullanıcı girdilerini onaylamak için kullanılır
- Sütük format kuralları (mesela URL veya E-posta onaylama)
- Başarlarsa beklendiğiniz tipi döndürer, başarlarsa FALSE döndürer
Temizleme filtreleri:
- Dize içerisinde belirli karakterleri izin vermek veya yasaklamak için kullanılır
- Veri formatı kuralları yok
- Her zaman bir dize döndürer
Seçenekler ve bayraklar
Seçenekler ve bayraklar, belirli bir filtreye ekstra filtre seçenekleri eklemek için kullanılır.
Farklı filtreler farklı seçenekler ve bayraklar çeştir.
Açağırında, biz "filter_var()" ve "min_range" ve "max_range" seçeneklerini kullanarak bir tamsayıyı onaylad႒ız:
<?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Tamsayı geçerli değil"); } else { echo("Tamsayı geçerli"); } ?>
Yukarıdaki kod gibi, seçenekler "options" adlı ilgili bir diziye konmalıdır. Bayrak kullanılırsa, dizine konmaz.
Tamsayının "300" olduğu için, yukarıdaki kodun çıktısı "Tamsayı geçersiz" olacaktır.
Tam fonksiyon ve filtre listesi için CodeW3C.com tarafından sağlanan PHP Filtre Referans KılavuzuHer filtre seçeneği ve bayrağını görebilirsiniz.
Girdi doğrulama
Formdan gelen girdiyi doğrulamaya çalışalım.
Yapmamız gereken ilk şey, aradığımız girdi verilerinin var olup olmadığını doğrulamaktır.
Sonra, filter_input() fonksiyonunu kullanarak girdi verilerini filtreleyelim.
Aşağıdaki örnekte, girdi değişkeni "email" PHP sayfasına iletildi:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Girdi türü mevcut değil"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail geçersizdir"; } else { echo "E-Mail geçerlidir"; } } ?>
Örnek açıklaması:
Yukarıdaki örnekte, "GET" yöntemi ile iletilen bir girdi değişkeni (email) vardır:
- "GET" türündeki "email" girdi değişkeninin var olup olmadığını denetleyin
- Girdi değişkeni varsa, onun geçerli bir e-posta adresi olup olmadığını denetleyin
Girdi temizleme
Formdan gelen URL'yi temizlemeye çalışalım.
Öncelikle, aradığımız girdi verilerinin var olup olmadığını doğrulamalıyız.
Sonra, filter_input() fonksiyonunu kullanarak girdi verilerini temizleyelim.
Aşağıdaki örnekte, girdi değişkeni "url" PHP sayfasına iletildi:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Girdi türü mevcut değil"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Örnek açıklaması:
Yukarıdaki örnekte, "POST" yöntemi ile iletilen bir girdi değişkeni (url) vardır:
- "POST" türündeki "url" girdi değişkeninin var olup olmadığını denetleyin
- Bu girdi değişkeni varsa, onu temizleyin (yasadışı karakterleri kaldırın) ve $url değişkenine saklayın
Eğer girdi değişkeni şu gibiyse: "http://www.W3非o法ol.com.c字符n/", ise temizlenmiş $url değişkeni şu şekilde olmalıdır:
http://www.codew3c.com/
Çoklu girdi filtreleme
Formlar genellikle birden fazla girdi alanından oluşur. filter_var veya filter_input'a tekrar tekrar çağrımdan kaçınmak için filter_var_array veya filter_input_array fonksiyonlarını kullanabiliriz.
Bu örnekte, üç GET değişkenini filtrelemek için filter_input_array() fonksiyonunu kullanıyoruz. Alınan GET değişkenleri bir ad, bir yaş ve bir e-posta adresidir:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("Yaş 1 ile 120 arasında bir sayı olmalıdır.<br />"); } elseif(!$result["email"]) { echo("E-Mail geçersiz.<br />"); } else { echo("Kullanıcı girdisi geçerlidir"); } ?>
Örnek açıklaması:
Yukarıdaki örnekte "GET" yöntemi ile iletilen üç girdi değişkeni vardır (name, age ve email)
- Girdi değişkenlerinin adlarını ve belirli girdi değişkenleri için kullanılacak filtreleri içeren bir dizi ayarlayın
- filter_input_array fonksiyonunu çağırın, parametreler GET girdi değişkenleri ve daha önce ayarladığınız dizidir
- $result değişkenindeki "age" ve "email" değişkenlerinin yasadışı girdi olup olmadığını tespit edin. (Yasadışı girdi varsa,)
filter_input_array() fonksiyonunun ikinci parametresi dizi veya tek bir filtreleyici ID'si olabilir.
Eğer bu parametre tek bir filtreleyici ID'si ise, bu belirtilen filtre, girdi dizisindeki tüm değerleri filtreleyecektir.
Eğer bu parametre bir dizi ise, bu dizi aşağıdaki kurallara uymalıdır:
- Bu, bir ilişkili dizi olmalıdır ve içindeki girdi değişkenleri dizinin anahtarları olmalıdır (örneğin, "age" girdi değişkeni)}
- Bu dizinin değerleri, filtre ID'si olmalı veya filtre, bayrak ve seçenekleri belirlediği bir dizi olmalıdır
Filter Callback Kullanımı
FILTER_CALLBACK filtresini kullanarak özel bir fonksiyonu çağırabilir ve onu bir filtre olarak kullanabiliriz. Böylece, veri filtreleme üzerinde tam kontrolümüzü elde ederiz.
Kendi özel fonksiyonunuzu oluşturabilir veya mevcut PHP fonksiyonlarını kullanabilirsiniz.
Filtre fonksiyonunu kullanmak için yöntem belirleme, seçenek belirleme yöntemiyle aynıdır.
Aşağıdaki örnekte, tüm "__" sembolleri boşluklara dönüştürmek için özel bir fonksiyon kullanıyoruz:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Yukarıdaki kodun sonucu şu şekilde olacaktır:
Peter harika bir adam!
Örnek açıklaması:
Yukarıdaki örnekte, tüm "__" sembolleri boşluklara dönüştürülüyor:
- "__" sembolünü boşlukla değiştiren bir fonksiyon oluşturun
- filter_var() fonksiyonunu çağırın, bu fonksiyonun parametreleri FILTER_CALLBACK filtresi ve bizim fonksiyonlarımız içeren bir dizi
- Önceki Sayfa PHP İstisna
- Sonraki Sayfa MySQL Tanıtımı