Sécurisation des variables POST et GET ... presque bon

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sécurisation des variables POST et GET ... presque bon

Re: Sécurisation des variables POST et GET ... presque bon

par AB » 26 août 2012, 16:06

Merci, mais alors comment empêcher l insertion de balise script en base de donnée ?
En quoi est-ce gênant ?

Re: Sécurisation des variables POST et GET ... presque bon

par Gigipop » 26 août 2012, 11:31

Merci, mais alors comment empêcher l insertion de balise script en base de donnée ?

Re: Sécurisation des variables POST et GET ... presque bon

par AB » 26 août 2012, 04:14

ATTENTION, IL NE FAUT PAS UTILISER HTMLENTITIES POUR ENREGISTRER DES DONNEES DANS UNE BDD. C'est une fausse bonne idée. Il faut utiliser htmlentities (ou de préférence htmlspecialchars) uniquement à l'affichage.

Re: Sécurisation des variables POST et GET ... presque bon

par gigipop » 25 août 2012, 21:52

Merci beaucoup, voilà comment je procède finalement :
public function securizeVariables( $isAdmin = false ) {

		$this->isAdmin = $isAdmin;

		global $_;

		$_ = array();

		foreach($_POST as $key=>$val) {

		if( is_array($val) ) {
				$val = $this->copyTab($val);
			} else { 
				$val = $this->protectVar($val);
			}

			$_[$key]=$val;
		}

		foreach($_GET as $key=>$val) {

			if( is_array($val) ) {
				$val = $this->copyTab($val);
			} else {
				$val = $this->protectVar($val);
			}

			$_[$key]=$val;
		}
	}

	private function protectVar( $val ) {

		if($this->isAdmin) {
			$val = mysql_escape_string( $val );
		} else {
			$val = mysql_escape_string( htmlentities($val, ENT_QUOTES, "UTF-8") );
		}
	
		return $val;
	}

	private function copyTab($tab)
	{
	    $tmp = array();
	    foreach($tab as $val)
	    {
	         if(is_array($val))
	             $tmp[] = $this->copy_tab($val);
	         else
	             $tmp[]= $val = $this->protectVar($val);
	    }
	    return $tmp;
	}

Re: Sécurisation des variables POST et GET ... presque bon

par Lirio » 24 août 2012, 12:12

Il faut regarder du côté de la fonction array_walk_recursive.
Quelque chose du genre :
$globals = $_POST + $_GET;

/**
 * Fonction de rappel
 * Parfois, on ne peut pas utiliser directement htmlentities.
 */
function clear(&$input, $key)
{
    $input = htmlentities($input);
}

$result = array_walk_recursive($globals, 'clear');

Re: Sécurisation des variables POST et GET ... presque bon

par Mazarini » 24 août 2012, 08:07

Je pense que tu est obligé de faire une fonction récursive qui fait la modification que tu veux dans le cas général et qui s'appelle dans le cas d'un array.

Re: Sécurisation des variables POST et GET ... presque bon

par gigpop » 23 août 2012, 16:45

le site ... : http://blog.idleman.fr/?p=628

merci

Sécurisation des variables POST et GET ... presque bon

par gigipop » 23 août 2012, 16:44

Bien le bonjour,

Je viens voir car je bute sur un problème.

Je souhaites sécuriser l’ensemble de mes variables POST et GET en une seule fois.
J'ai trouvé pour cela ce site.

je fais donc :
$_ = array_map('mysql_real_escape_string', array_map('htmlentities', array_merge($_GET, $_POST)));
Cela fonctionne très bien, sauf dans un cas; je m'explique :

Avec un formulaire qui contient des champs qui lors de l'envoi sont passé par un tableau, j'obtiens cette erreur :
Warning: htmlentities() expects parameter 1 to be string, array given in /Applications/MAMP/...config.php on line 6

Auriez-vous une solution ou un début de piste ?
Merci beaucoup !