URL değişkenleri temizlemek için bir derli toplu yolu?

4 Cevap php

Ben onlarla çalışmak daha önce, benim url değişkenleri almak temizlemek için hızlı ve kolay bir fonksiyon olup olmadığını merak ediyorum. (Veya $ _POST düşünmek gelmek ...)

Ben izinsiz karakterleri değiştirmek için bir regex kullanabilirsiniz varsayalım, ama insanlar bu tür bir şey için kullanmak ne duymak ilgileniyorum?

4 Cevap

I PHP input filters kullanımı ve işlev urlencode.

Girişi temizlik kavramı bana çok mantıklı gelmedi. Bu giriş bazı tür tehlikeli, ama gerçekte böyle bir şey gibi tehlikeli girişi olduğu varsayımına dayanıyor; Yanlış girişini işleyen Sadece kodu.

Bunun suçlu olduğunu sonra tercüman her türlü değerlendirilir dize çeşit (kod), içinde bir değişken gömmek ise, you must ensure that the variable is properly escaped olduğunu. Bir SQL-deyiminde bir dize gömmek Örneğin, o zaman bu dize bazı karakterler alıntı ve kaçmak gerekir. Eğer bir URL değerleri gömmek, o zaman urlencode . If you embed a string within a HTML document, then you must escape with htmlspecialchars ile kaçmak gerekir. Ve böylece ve benzeri.

Bilemezsiniz çünkü bir mahkum strateji, ön "temiz" veriler için çalışıyorum - o noktada - veri PHP rezil magic_quotes, anti-özelliği içeri kullanılan olacak olan bağlam, Bu yanlış düşüncenin bir örnektir.

Düzenli ifadeler yararlı olabilir, ve aynı zamanda PHP 5.2.0 farklı şekillerde girdi değişkenleri filtreleme adanmış bütün bir filter uzantısını tanıttı.

Bu girdi değişkenleri doğası öylesine ... değişkeni olduğundan, tek bir çözüm tavsiye etmek zor. :-)

Ben MySQL veritabanı kullanımı için girdiyi aşağıdaki yöntemi kullanın. Özetle, $ _POST veya foreach üzerinden $ _GET dizi boyunca yineleme, ve bunu temizlemek için DBSafe fonksiyonu sayesinde her $ _POST veya $ _GET geçmek için. DBSafe kolayca veri değişkenlerin diğer kullanımlar için modifiye edilebilir (örn. HTML çıktı vb.).

// Iterate POST array, pass each to DBSafe function to clean up data
foreach ($_POST as $key => $PostVal) {

  // Convert POST Vars into regular vars
  $$key=DBSafe($PostVal);

  // Use above statement to leave POST or GET array intact, and use new individual vars
  // OR, use below to update POST or GET array vars

  // Update POST  vars
  $_POST[$key]=DBSafe($PostVal);
}


function DBSafe($InputVal) {
// Returns MySQL safe values for DB update. unquoted numeric values; NULL for empty input; escaped, 'single-quoted' string-values; 

  if (is_numeric($InputVal)) {
    return $InputVal;
  } else {
    // escape_string may not be necessary depending on server PHP and MySQL (i.e. magic_quotes) setup.  Uncomment below if needed.
    // $InputVal=mysql_escape_string($InputVal);
    $InputVal=(!$InputVal?'NULL':"'$InputVal'");
    return $InputVal;
  }
}