$ _POST değişkenleri temizleme

5 Cevap php

Ben etkili kolayca tüm POST temizlemek ve bir tek fonksiyonu ile değişkenleri GET için bir yol ile gelip çalışıyorum. Burada kendisi işlevi var:

//clean the user's input
function cleanInput($value, $link = '')
{
    //if the variable is an array, recurse into it
    if(is_array($value))
    {
    	//for each element in the array...
    	foreach($value as $key => $val)
    	{
    		//...clean the content of each variable in the array
    		$value[$key] = cleanInput($val);
    	}

    	//return clean array
    	return $value;
    }
    else
    {
    	return mysql_real_escape_string(strip_tags(trim($value)), $link);
    }
}

Ve burada diyebileceğim kodu:

//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
    $_POST[$key] = cleanInput($value, $link);
}

//This stops SQL Injection in GET vars
foreach ($_GET as $key => $value)
{
    $_GET[$key] = cleanInput($value, $link);
}

Çalışması gerektiği gibi bana bu görünüyor. Ama nedense ben bir form bazı onay kutularını diziler dönmeyecektir. Bunlar boş dışarı gelmesini sağlayacak.

Ben yukarıdaki işlevi olmadan benim kod test ettik ve iyi çalışıyor, ben sadece istiyorum ki orada güvenlik biraz eklendi.

Teşekkürler!

5 Cevap

Ne yapıyoruz yeterli değildir. Bkz here.

filter_input eğer mümkünse (php5 +) Bu Kadar dezenfekte ve bunu kullanarak ihtiyacınız olabilecek her şeyi doğrulamak farkında im gibi o çok temiz tutar ve kullanın.

Sen bütün post dizi filtre örneğin FILTER_SANITIZE_STRING bayrak filter var array kullanabilir ve

filter_var_array($_POST, FILTER_SANITIZE_STRING) //just an example filter

W3schools bulunan farklı filtre seçenekleri yükler vardır filter reference

özyineleme daha şık yapmak için örneğin array_map gibi bir şey kullanabilirsiniz:

$_POST = array_map('mysql_real_escape_string',$_POST);

Eğer olsa yaklaşımların bu tür olsa da, sadece bir örnek genellikle kötü olarak eğer filtre var kullanmak ;)

denetlenmeyen onay kutularını sunucusuna gönderilir.

Eğer array_walk_recursive ne istediğinizi yapmak için kullanabilirsiniz

Bu girişini temizlik konusunda gitmek için yanlış bir yoldur.

$_POST kesinlikle her şey için battaniye kaçan mysql uygulanması ve $_GET Eğer bir veritabanı sorgusu yaptıktan sonra hala verileri kullanmak isterseniz, geri gelip seni ısırmaya gidiyor ama Orada kaçış karakterleri istemiyorum.

Mysqli'nin veya PDO ile Parametrelenmiş sorguları kullanmak ve kullanmak için ihtiyacınız asla mysql_real_escape_string().