Securisation de formulaire

  • Auteur de la discussion Auteur de la discussion Zecat
  • Date de début Date de début
WRInaute accro
Je travail assidument mon phprank :wink: et j'en suis au chapitre sécurisation des données venant des form ...

Pour le moment je fais cela :

1 - strip_tags sur tous les $_POST

2 - sur les champs de type email, j'applique en plus :
Code:
   $email= lc $email;
  $email=~ s/(.*)\n.*/$1/;
  $email=~ s/,/ /;
  $email=~ s/[^a-z0-9_\-\.@]/ /g;
  $email=~ s/^ +//;
  $email=~ s/ .*//;
en gros : on passe en minuscule, on vire ce qui suit un retour à la ligne, on vire tout ce qui n'est pas un caractère normal dans un email et on fait le menage des espaces en trop.

3 - sur les champs de type title (subject), j'applique juste (en plus du strip_tags bien sur) :
Code:
  $title=~ s/(.*)\n.*/$1/;

4 - sur les champs num j'applique un intval.

Est-ce que ca vous parait pertinent ?

Voyez-vous d'autres choses à ajouter pour securiser plus ?
 
WRInaute impliqué
Pour la vérif de ton email, es tu certain que ton code gère tous les cas ?
En général, j'utilise ce code :
Code:
<?php
// Auteur : bobocop (arobase) bobocop (point) cz
// Traduction des commentaires par mathieu

// Le code suivant est la version du 2 mai 2005 qui respecte les RFC 2822 et 1035
// http://www.faqs.org/rfcs/rfc2822.html
// http://www.faqs.org/rfcs/rfc1035.html

$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
                               
$regex = '/^' . $atom . '+' .   // Une ou plusieurs fois les caractères autorisés avant l'arobase
'(\.' . $atom . '+)*' .         // Suivis par zéro point ou plus
                                // séparés par des caractères autorisés avant l'arobase
'@' .                           // Suivis d'un arobase
'(' . $domain . '{1,63}\.)+' .  // Suivis par 1 à 63 caractères autorisés pour le nom de domaine
                                // séparés par des points
$domain . '{2,63}$/i';          // Suivi de 2 à 63 caractères autorisés pour le nom de domaine

// test de l'adresse e-mail
if (preg_match($regex, $email)) {
    echo "L'adresse e-mail $email est valide";
} else {
    echo "L'adresse e-mail $email n'est pas valide";
}
?>
Source : http://atranchant.developpez.com/code/validation/

Bientôt Php rank 2 !
 
WRInaute passionné
strip_tags n'est pas suffisant, dans certains cas on peut la bypasser en combinant des problèmes d'encodage ...etc

le mieux c'est d'utiliser en plus input_filter, regarde ce lien : http://devzone.zend.com/article/1113

pour la validation d'email je pense qu'il est préférable d'utiliser preg_match.
si ton mail contient un retour chariot ca ne sert à rien de tenter de le corriger, celà indique une potentielle attaque donc il faut rejetter tout de suite, d'ou l'interet d'un bon preg_match avec une bonne expression régulière.
 
WRInaute accro
Voila ce que j'utilise moi

Pour vérifier un mail:

Code:
function is_MailOk($adresse) {
    if(preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#',$adresse))
        return true;
    else
        return false;
}

Pour filtrer les valeurs de GET/POST j'utilise la fonction de phpBB3 qui rox trop du poney le plus souvent ;P
Mais ceci suffit non ? :

Code:
function formatString($string) {
    return trim(htmlspecialchars($string,ENT_QUOTES));
}

function formatNumber($num) {
    return intval($num);
}
 
WRInaute passionné
YoyoS a dit:
Voila ce que j'utilise moi

Pour vérifier un mail:

Code:
function is_MailOk($adresse) {
    if(preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#',$adresse))
        return true;
    else
        return false;
}

Pour filtrer les valeurs de GET/POST j'utilise la fonction de phpBB3 qui rox trop du poney le plus souvent ;P
Mais ceci suffit non ? :

Code:
function formatString($string) {
    return trim(htmlspecialchars($string,ENT_QUOTES));
}

function formatNumber($num) {
    return intval($num);
}

en general c'est suffisant, mais comme dans la sécu il faut être parano, voici une discussion interessante à lire : http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysq ... from-injec


la sécurisation des données dépends aussi de l'utilisation qu'on compte en faire derrière.
 
WRInaute passionné
Je plussoie hyadex pour les adresses mails : il faut tester les caractères valides car les adresses mails ont un format connu respectant une norme.

Pour toutes les clés passées en POST, il y a pas mal de choses à filtrer.

Code:
$vala = stripslashes($vala);
$vala = htmlspecialchars($vala);
if (trim($vala)) {
			   if (stristr($vala,"Content-Type:") || stristr($vala,"MIME-Version") || stristr($vala,"Content-Transfer-Encoding") || stristr($vala,"bcc:")) {
			   	  die($DieErrorMsg);
			   }
			}
Pas besoin d'injection sql ou script pour faire bugger un mail, il suffit d'inclure certaines valeurs clés dans le texte.

Et il y a encore d'autres anti-bugs...
 
WRInaute accro
Pour valider les emails, j'utilisais cette fonction:
Code:
function validateEmail($email) {
	if(	(preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) ||
		(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,5}|[0-9]{1,3})(\]?)$/',$email)) ){
		
		$host = explode('@', $email);
		if(checkdnsrr($host[1].'.', 'MX') ) return true;
		if(checkdnsrr($host[1].'.', 'A') ) return true;
		if(checkdnsrr($host[1].'.', 'CNAME') ) return true;
	}
	return false;
}

/*checkdnsrr() pour windows*/
if (!function_exists('checkdnsrr')) {
	function checkdnsrr($host, $type = '') {
		if(!empty($host)) {
			if($type == '') $type = "MX";
			@exec("nslookup -type=$type $host", $output);
			while(list($k, $line) = each($output)) {
				if(eregi("^$host", $line)) return true;
			}
			return false;
		}
	}
}

Autre fonction plus simple, avec filter_var():
Code:
function isValidMail( $mValue )
{
    return filter_var( $mValue, FILTER_VALIDATE_EMAIL );
}
Source: http://snipplr.com/view/30810/vailidate-email/

D'autres:
http://snipplr.com/view/31886/email-validation-function/
http://snipplr.com/view/20152/validate-email-address/
http://snipplr.com/view/16326/php-isvalidemail/
...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Haut