PHP kullanılırken form üzerinden özel karekterlerin sunucuya gönderilmesi bazı zafiyetlere neden olabilir. Zafiyetlerin ve güvenlik açıklarının engellenmesi için kullanıcılardan gelen tüm özel karekterler filtrelenmelidir. Özel karekterleri filtrelemediğiniz durumda verilerinizi koruyamayabilirsiniz. Form veya kullanıcıdan sunucuya gelen tüm veriler için mutlakan özel karekterlerin filtrelenmesi önerilir. Aşağıdaki kod özel bazı karekterlerin filtrelenmesini sağlar. Burada POST ile alınan bir veride arama yapılmaktadır, aynı işlem GET ile alınan veriye de uygulanabilir.
İlk olarak whide list uygulamak güvenlik açısından daha öenmlidir. Aşağıda gelen değerin içinde özel karekterleri filtreleyen ve IP adresini doğrulayan bir fonksiyon görüyorsunuz.
$IPv4 = htmlspecialchars($raw_input, ENT_QUOTES, 'UTF-8');
if (filter_var($IPv4, FILTER_VALIDATE_IP))
{ }
Kullanıcı girdilerini doğru bir şekilde filtreleyin: Verileri htmlspecialchars() veya filter_input() gibi fonksiyonlarla filtreleyerek HTML özel karakterlerini ve diğer potansiyel zararlı karakterleri temizleyin.
$name = filter_input(INPUT_POST, $_POST["veri"], FILTER_SANITIZE_SPECIAL_CHARS);
veya
htmlspecialchars($_POST["veri"], ENT_QUOTES, 'UTF-8')
veya
{
$_POST["veri"] = ''"; //Değeri sıfırla
}
else
{
// Herhangi bir değişiklik yapma.
}
function RemoveSpecialChar($str) {
// Using str_replace() function
// to replace the word
$res = str_replace( array( '\'', '"',
',' , ';', '<', '>', '?', '-', '='), ' ', $str);
// Returning the result
return $res;
}
$_POST["veri"] = RemoveSpecialChar($_POST["veri"]);
<?php
function filtre(&$value) {
$value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
while($row = oci_fetch_assoc($parse)){
array_walk_recursive($row, "filtre");
$data[]=$row;
?>
Unutmayın güvenlik her şeyden önce gelir.