2010-09-05 12 views
26

Mam formularz z dużą ilością zmiennych, który następnie wysyła wiadomość e-mail, zamiast oczyszczać każdą wartość $_POST za pomocą filter_var($_POST['var'], FILTER_SANITIZE_STRING); Byłem po prostszym kawałku kodu. Wymyśliłem poniżej, co wydaje się działać tak, jak sądzę, domyślną akcją jest FILTER_SANITIZE_STRING, ale właśnie zastanawiałem się, jakie są opinie ludzi, a jeśli to nie jest dobra praktyka, może mógłbyś mi powiedzieć, dlaczego? Wartości $_POST są następnie indywidualnie osadzone w nowych zmiennych, więc chciałbym używać array_map dopiero na początku do dezynfekcji wszystko ...

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

Dziękuję za odpowiedzi, aby dać trochę więcej informacji, w zasadzie :

mam 20-30 pól wejściowych w formie, które są zrobione, dane są następnie wyświetlane użytkownikowi w celu sprawdzenia ich wkład, zmienne są następnie odkażane, użytkownik zostaje wysłany e-mail i następnie dane są wprowadzane do db.

Obecnie jestem sanitizing za pomocą powyższej funkcji array_map, jak również FILTER_SANITIZE_EMAIL na adres e-mail przed wysłaniem wiadomości e-mail, a następnie ucieczkę wejście przy użyciu mysql_real_escape_string() przed wstawić do db. Bez wchodzenia w przygotowywane oświadczenia itp. Czy myślisz, że powinienem robić cokolwiek dodatkowo? dzięki jeszcze raz!

+0

sanitize ciąg, tu jest użyteczna funkcja - http://stackoverflow.com/questions/3126072/what-are-the-best-php-input-sanitizing-functions/20403438#20403438 –

+0

możliwy duplikat [PHP -Sanitize wartości a ar ray] (http://stackoverflow.com/questions/4861053/php-sanitize-values-ofa-a-ray) – feeela

Odpowiedz

14

Zależy od tego, do czego jest używany.

Jeśli wstawiasz go do bazy danych, to mysql_real_escape_string() dla cytowanych ciągów i odlewania tekstu dla liczb byłoby drogą do zrobienia - dobrze idealnie przygotowane stwierdzenia, ale to zupełnie inna sprawa.

Jeśli planujemy wyprowadzania danych na stronie internetowej to polecam coś takiego htmlspecialchars()

Jeśli planujesz za pomocą wprowadzania danych przez użytkownika jako argument powłoki, wówczas należałoby użyć escapeshellarg()

Przeniesienie na swoim pytanie o wysyłanie e-maili. Cóż, powinno wystarczyć następujące:

filter_var($_POST['message'], FILTER_SANITIZE_STRING); 

Wszystko to polega w zasadzie na usuwaniu znaczników i kodowaniu znaków specjalnych.

+1

Dobra odpowiedź. Dodam tylko, że jeśli zamierzasz zezwalać na wprowadzanie danych przez użytkownika do swojej strony internetowej, rozważ użycie strip_tags(), aby uniemożliwić ludziom rzucanie się w

4

Nie ma prawidłowego sposobu czyszczenia kanalizacji. Potrzebna metoda sanitacji zależy od tego, co robi się z danymi.

Sanitize dane bezpośrednio przed użyciem.

+0

dziękuję, zdaję sobie z tego sprawę, staram się to osiągnąć bez pisania wielu powtarzalnych kodów ... – SirG

+0

@SirG: by al oznacza potwierdzenie wejścia, ale powinieneś zawsze aplikować transformacje sanitization do danych, gdy ** pozostawia ** PHP - i metoda powinna być odpowiednia do miejsca, w którym dane idą (mysql_real_escape_string(), htmlentities(), urlencode(), base64) _encode(), escapeshellarg(), addslashes () .... itd. wszystkie robią ** różne ** rzeczy) – symcbean

+0

@symcbean, dzięki za odpowiedź, więc czy filter_var byłby odpowiedni do zastosowania tuż przed wysłaniem wiadomości e-mail za pośrednictwem funkcji poczty php? Twoje zdrowie. – SirG

55

Jeśli typ każdego z zmiennych wejściowych jest ciągiem i chcesz zdezynfekować je wszystkie naraz, można użyć:

// prevent XSS 
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); 
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 

To będzie zdezynfekować swój $ _GET i $ _POST tablic.

widziany tutaj: PHP -Sanitize values of a array

0

To co mogę używać we wszystkich moich projektach:

function util_array_trim(array &$array, $filter = false) 
{ 
    array_walk_recursive($array, function (&$value) use ($filter) { 
     $value = trim($value); 
     if ($filter) { 
      $value = filter_var($value, FILTER_SANITIZE_STRING); 
     } 
    }); 

    return $array; 
} 

Pozwala na przycinanie i zdezynfekować zagnieżdżony wachlarz opublikowanych danych

Powiązane problemy