PHP filter_var() Doğrulama ve temizleme filitreleri
Bu yazıda, harici verileri örnek kodla sterilize etmek ve doğrulamak için PHP filtreleri açıklanmaktadır. PHP filtresi, kullanıcı girişini kontrol etmek ve doğrulama işlemini oldukça kolay ve hızlı bir şekilde yapmak için tasarlanmış kullanışlı uzantılara sahiptir.
Web uygulamalarında veri güvenliğini sağlamak için çeşitli metotlar kullanılır. Geliştiriciler bazen hazır metotları bazen kendi geliştirdikleri veri filitreleme metotlarını tercih ederler. Veri doğrulama ve veri temizleme işlerini kullanmak için php 5.2 ve üst sürümler olmalı.
Web uygulamasında genellikle e-posta, numara, dize, IP adresi gibi kullanıcı giriş verilerini dezenfekte etmemiz ve doğrulamamız gerekir. Bu PHP filtre uzantısını kullanarak bunu kolayca başarabiliriz.
PHP Filtrelerini Kullanma:
Kullanıcı verilerini dezenfekte etmek veya doğrulamak için PHP filter_var()
fonksiyonu kullanıyoruz.
sözdizimi:
Bu fonksiyon, son iki seçeneğin isteğe bağlı olduğu üç parametreyi alır. İlk parametre, filtrelenecek değerdir, ikinci parametre uygulanacak filtrenin kimliğidir ve üçüncü parametre, filtreyle ilgili seçenek dizisidir. Nasıl çalıştığını görelim.
Doğrulama Filitreleri
PHP kılavuzunda mevcut filtrelerin bazıları
- FILTER_VALIDATE_EMAIL : E-postaların RFC 822 standardına göre doğrulanması.
- FILTER_VALIDATE_INT : Tamsayıların doğrulanması. Bir tam sayı içeren bir dize iletilirse, değer dönüştürülür ve doğrulanır.
- FILTER_VALIDATE_IP : IP formatının geçerliliği. Hem IPv4 hem de IPv6 ile çalışır.
- FILTER_VALIDATE_MAC: MAC adresinin doğrulanması, ağ kartlarının fiziksel adresi.
- FILTER_VALIDATE_URL : URL'lerin RFC 2396 standardına göre doğrulanması.
Temizleme Filitreleri
Steril filtreler kullanıldığında, seçilen desene uymayan tüm karakterler girdideki değerden alınır. Bazı sterilize filtrelerin bir listesi:
- FILTER_SANITIZE_EMAIL : Harfler, rakamlar ve # $% & '* + - =? ^ _ `{ | } ~ @. [ ] Dışındaki tüm karakterleri kaldırır.
- FILTER_SANITIZE_NUMBER_FLOAT : Sayılar hariç tüm karakterleri + ve - isteğe bağlı olarak, EE'den kaldırır.
- FILTER_SANITIZE_NUMBER_INT : Sayılar, pozitif ve negatif işaretler dışındaki tüm karakterleri kaldırır.
- FILTER_SANITIZE_SPECIAL_CHARS : Filtresi HTML özel karakterlerden kaçar. '' '<> Karakteri ve ASCII değeri 32'den küçük olan tüm karakterleri ayıklar. İsteğe bağlı olarak, diğer özel karakterleri kaldırabilir veya dönüştürebilirsiniz.
- FILTER_SANITIZE_STRING : Etiketleri kaldır İsteğe bağlı olarak, diğer özel karakterleri kaldırabilir veya dönüştürebilirsiniz.
- FILTER_SANITIZE_URL : Harf, rakam ve $ -_. +! * '( ), { } | \\ ^ ~ [ ] `<> #%"; /?: @ & = Dışındaki tüm karakterleri kaldırır.
- FILTER_SANITIZE_MAGIC_QUOTES : Bir dizeye
addslashes()
işlevini gerçekleştirir .
Ekstra Seçenekler
Bu doğrulama filtrelerinin davranışını değiştirmenin bazı yolları olduğu için PHP belgelerini okumak önemlidir. Doğrulama filtreleri bayrak ve seçenekleri kabul edebilir, ancak temizleyiciler yalnızca bayrakları kabul edebilir. Bu özelliklerin tümü, kılavuzdaki her filtrenin tanımlarının yanında listelenmiştir.
Bir Dizeyi Temizleyin
Aşağıdaki örnek, tüm HTML etiketlerini kaldırarak bir dizeyi dezenfekte edecektir:
$str = "<h1>selam! Bugün hava güzel</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
ÇIKTI:
Tamsayı Değerlerini Doğrula
Aşağıdaki örnek, $int değişkeninin bir tamsayı olup olmadığını kontrol etmek için filter_var()
fonksiyonu kullanır.
// tamsayı değeri
$int = 20;
// Tamsayı değerini doğrula
if(filter_var($int, FILTER_VALIDATE_INT)){
echo "$int geçerli bir tamsayı";
} else{
echo "$int geçersiz bir tamsayı";
}
ÇIKTI:
Yukarıdaki örnekte, eğer değişken $int=0 olarak ayarlanmışsa, örnek kod geçersiz tamsayı mesajı gösterecektir. Bu sorunu gidermek için, aşağıdaki gibi 0 (sıfır) değerini açıkça test etmeniz gerekir:
// tamsayı değeri
$int =0;
// Tamsayı değerini doğrula
if(filter_var($int, FILTER_VALIDATE_INT) === 0 ||
filter_var($int, FILTER_VALIDATE_INT)){
echo "<b>$int</b> geçerli bir tamsayı";
} else{
echo "<b>$int</b> geçersiz bir tamsayı";
}
IP Adreslerini Doğrula
Aşağıdaki örnek, $ip değişkeninin geçerli bir IP adresi olup olmadığını kontrol etmek için filter_var()
fonksiyonu kullanır:
$ip = "129.0.0.1";
if(filter_var($ip, FILTER_VALIDATE_IP)){
echo "Geçerli $ip IP adresi";
} else {
echo "Geçersiz $ip IP adres ";
}
ÇIKTI:
IPV4 veya IPV6 IP adresleri için doğrulama işlemini sırasıyla FILTER_FLAG_IPV4 veya FILTER_FLAG_IPV6 bayraklarını kullanarak da uygulayabilirsiniz . İşte bir örnek:
$ip = "129.0.0.1";
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
echo "Geçerli $ip IP adresi";
} else {
echo "Geçersiz $ip IP adres ";
}
E-posta Adreslerini Düzenleme ve Doğrulama
Aşağıdaki örnekte, tüm Kural dışı karakterleri $e-posta değişkeninden kaldırmak için filter_var()
fonksiyonu kullanılır, ardından geçerli bir e-posta adresi olup olmadığına bakın:
$email = "webcebir>>@@example.com";
// Tüm Kural dışı karakterleri kaldırır.
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// e-posta adresini doğrula
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
echo "<b>$email</b> Geçerli e-posta";
} else{
echo "<b>$email</b> Geçersiz e-posta";
}
ÇIKTI:
URL'leri Temizle ve Doğrula
// website url
$url = "http://www.webcebi€€r.c€€om";
// Tüm kural dışı Karakterleri temizler
$url = filter_var($url, FILTER_SANITIZE_URL);
// Website url doğrula
if(filter_var($url, FILTER_VALIDATE_URL)){
echo "<b>$url</b> Geçerli bir url";
} else{
echo "<b>$url</b> Geçersiz bir url";
}
ÇIKTI:
FILTER_FLAG_QUERY_REQUIRED
Aşağıdaki örnekte gösterildiği gibi bir URL'nin sorgu dizesi içerip içermediğini veya bayrağı kullanarak olup olmadığını da kontrol edebilirsiniz :
$url = "http://www.example.com?konu=filters";
//Sorgu dizesi için web sitesi URL'sini doğrula
if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)){
echo "$url sorgu dizesi içerir.";
} else{
echo "$url sorgu dizesi içermez.";
}
SQL Injeksiyon için Metinleri Düzenle
FILTER_SANITIZE_MAGIC_QUOTES
filtresi , bir dizeye addslashes()
işlevini gerçekleştirir .
Bu filtre, önceden tanımlanmış karakterlerin önündeki ters eğik çizgileri ayarlar. SQL enjeksiyon filtrelemesi için filtreleme (örn. Tek ve çift tırnak)
$Metin = "Bu Gün'de hava'da Güzel ";
if(filter_var($Metin, FILTER_SANITIZE_MAGIC_QUOTES)){
ÇIKTI:
FILTER_SANITIZE_SPECIAL_CHARS XSS saldırılarını önler
FILTER_SANITIZE_SPECIAL_CHARS
filtresi HTML özel karakterlerden kaçar.
HTML Kodlarını (< , >) dönüştürür < , > Form alanında ziyaretci size mesajında kapatılmamış bir div etiketi Gönderebilir buda sizin sitede görünüm düzenini bozabilir.
POST ile gelen veri kullanımı
$name = filter_var($_POST['name'], FILTER_SANITIZE_SPECIAL_CHARS);
ÖTNEK:
$html = "<script>alert('merhaba')</script>";
$x =filter_var($html, FILTER_SANITIZE_SPECIAL_CHARS);
echo $x;
Yukarıdaki örnek veri filitreden geçmese javascript kodu alert mesajı verecektir. filitreden geçirdiğimiz için direk ekrana kodun kendini yazacak.
ÇIKTI:
Bir Aralık İçinde Tamsayı Doğrulama
Aşağıdaki örnek, sağlanan değerin bir tam sayı olup olmadığının yanı sıra 0 ila 100 aralığında olup olmadığını doğrulayacaktır.
$int = 80;
//istenen sayı 0 ile 100 arası
// Verilen sayı doğrula
if(filter_var($int, FILTER_VALIDATE_INT, array("options" =>
array("min_range" => 0,"max_range" => 100)))){
echo "istenilen sayıyı girdiniz :$int" ;
} else{
echo "istenilen sayıyı girmediniz: $int ";
}
ÇIKTI:
emin 29/11/2021
yönetici 01/12/2021
- HTML
- CSS
- PHP
- JQUERY
- PHOTOSHOP
- JavaScript
- Web Dünyası
- Linux
- MİTHRİL FRAMEWORK
- Laravel
- Git
- React
- HTML LİNK(Bağlantı)EKLEME - LİNK VERME
- HTML YAZI VE RESİM ORTALAMA
- HTML RESME LİNK VERME
- HTML FORM OLUŞTURMA
- CSS YATAY MENÜ YAPIMI
- HTML RESİM EKLEME
- CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
- HTML DİV ve SPAN NEDİR?
- HTML ARKAPLANA MÜZİK EKLEME
- KALİTE KAYBETMEDEN RESİMLERİ BÜYÜTME