2010-09-05 4 views
26

J'ai un formulaire avec beaucoup de variables qui est alors l'envoi d'un e-mail, plutôt que de désinfecter chaque $_POST valeur avec filter_var($_POST['var'], FILTER_SANITIZE_STRING); Je étais après un morceau de code plus simple. Je suis venu avec le ci-dessous, qui semble fonctionner comme je crois que l'action par défaut est FILTER_SANITIZE_STRING, mais je me demandais juste ce que les opinions des gens sont, et si ce n'est pas une bonne pratique, peut-être pourriez-vous me dire pourquoi? Les $_POST valeurs sont ensuite intégrées individuellement dans de nouvelles variables, donc je n'utiliseront array_map juste au début de désinfectez tout ...

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

Merci pour vos réponses, pour vous donner un peu plus d'informations, essentiellement :

Je 20-30 champs d'entrée sous une forme qui sont piégées, les données sont ensuite affichées à l'utilisateur de vérifier leur entrée, variables sont alors aseptisé, l'utilisateur est alors envoyé un e-mail et puis enfin les détails sont entrés dans un db.

Actuellement, je désinfecte en utilisant la fonction array_map ci-dessus, ainsi que FILTER_SANITIZE_EMAIL sur l'adresse e-mail avant d'envoyer un email, puis d'échapper l'entrée en utilisant mysql_real_escape_string() avant l'insertion dans la base de données. Sans entrer dans des déclarations préparées, etc. pensez-vous que je devrais faire quelque chose en plus? Merci encore!

+0

Pour Désinfectez la chaîne, est ici une fonction utile - http://stackoverflow.com/questions/3126072/what-are-the-best-php-input-sanitizing-functions/20403438#20403438 –

+0

duplication possible de [PHP -Sanitize valeurs d'un ar ray] (http://stackoverflow.com/questions/4861053/php-sanitize-values-of-a-array) – feeela

Répondre

14

Dépend de son utilisation.

Si vous l'insérez dans la base de données alors mysql_real_escape_string() pour les chaînes entre guillemets et le moulage de type pour les nombres serait le chemin à parcourir - bien des déclarations idéalement préparées, mais c'est un tout autre sujet.

Si vous envisagez de sortie des données sur la page Web alors je recommande quelque chose comme htmlspecialchars()

Si vous prévoyez d'utiliser l'entrée utilisateur comme argument shell, vous pouvez ensuite utiliser escapeshellarg()

Déplacement sur votre question sur l'envoi d'emails. Eh bien, ce qui suit devrait suffire:

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

Tout ce qu'il fait est essentiellement des étiquettes de bande et encoder des caractères spéciaux.

+1

Bonne réponse. J'ajouterai simplement que si vous autorisez l'entrée d'utilisateur sur votre page Web, pensez à utiliser strip_tags() pour empêcher les gens de lancer

4

Il n'existe pas de méthode correcte d'assainissement des blanchets. La méthode d'assainissement dont vous avez besoin dépend de ce qui est fait pour les données.

Désinfectez les données directement avant leur utilisation.

+0

merci, je réalise ceci, j'essaye juste d'accomplir ceci sans écrire beaucoup de code répétitif ... – SirG

+0

@SirG: par tous les moyens validez la contribution, mais vous devriez seulement jamais appliquer les transformations de sanitization en données quand ** quitte ** PHP - et la méthode devrait être appropriée à l'endroit où les données vont (mysql_real_escape_string(), htmlentities(), urlencode(), base64) _encode(), escapeshellarg(), addslashes () .... etc tous font ** choses différentes **) – symcbean

+0

@symcbean, merci pour la réponse, de même filter_var serait-il approprié d'appliquer juste avant d'envoyer un email via la fonction de messagerie de php? à votre santé. – SirG

55

Si le type de chacune de vos variables d'entrée est une chaîne et que vous voulez les aseptiser tout à la fois, vous pouvez utiliser:

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

Cela désinfectez votre _GET et $ _POST tableaux.

On voit ici: PHP -Sanitize values of a array

0

C'est ce que je l'utilise dans tous mes projets:

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; 
} 

Il permet de couper et désinfectez un tableau imbriqué des données affichées

Questions connexes