PHP 5.2 orada "input_filter" denilen eklenen güzel bir güvenlik fonksiyonu olduğunu, bu yüzden yerine söyleyerek:
$name = $_GET['name'];
Eğer şimdi söyleyebilirim:
$name = filter_input (INPUT_GET, 'name', FILTER_SANITIZE_STRING);
ve otomatik olarak dize sanitizes da var:
FILTER_SANITIZE_ENCODED
FILTER_SANITIZE_NUMBER_INT
FILTER_SANITIZE_EMAIL
FILTER_SANITIZE_URL
etc. so this is a very convenient security feature to use and I want to switch over to it completely.
The problem is... Ben sık sık bu gibi onları işlemeden önce $ _GET ve $ _POST dizileri, manipüle:
$ _GET ['Name'] = '(varsayılan adı)';
ama bu tür int olan "INPUT_GET" okur beri (?) filter_input $ _GET değişikliklere erişimi yok gibi görünüyor. Ben yerine $ _GET okumak için filter_input alabilir eğer güzel olurdu ama:
$name = filter_input ( $_GET, 'name', FILTER_SANITIZE_STRING );
bana hata veriyor:
Warning: filter_input() expects parameter 1 to be long, array given.
Herkes elimden bir şekilde düşünebilirsiniz:
- filter_input onları okuyabilir önce ben onun değerlerini değiştirmek, böylece
INPUT_GET
(o whereever) kaynağını işlemek - filter_input okumak için olsun
$_GET
ADDENDUM:
Zengin sordu: "Neden kesinlikle onları oldukça programlı ekledikten bir şey daha, bir giriş olmak istiyorum, zaten diziler değişiyor."
Bu gelen preprocess değişkenlere sadece çok uygun bir yer, örneğin bir sırayla için:
- varsayılan ayarlayın ($ _GET ['devlet'] ='' ardından $ _GET ['devlet'] = 'AL')
- manuel işlem yapmak (vb tüm boşlukları silin)
- güvenlik (bazıları artık filter_input tarafından yapılacaktır)
Sonra ben gelen değişkeni almak zaman biliyorum, güvenli ve geçerlidir. Tabii ki dizi başka bir dizi ve süreç $ _GET dizisini kopya olabilir ama zaten var, bu sistem diziler ile yapmak mantıklı yüzden $ _GET zaten işleyen bir dizi olduğu için bu sadece gereksiz bir adımdır.