Page 1 sur 1

[Fonction] Sécurité : filtre XSS et injections SQL

Posté : 14 mai 2006, 11:08
par patami
hello

voici ma fonction pour filtrer toute variable utilisateur (superglobale), basée entre autres sur les explications de Damien :
<?php

/*
fonction de filtrage (sécurité) des superglobales (variables utilisateurs $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES)
Auteur : Patami ([email protected])
Fonction valide pour PHP 4
*/

/*
### mode d'emploi ###
Appliquez la fonction getval() sur toute variable superglobale (variables utilisateurs $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES).
Il y a 4 attributs. Seul le 1er est obligatoire (les 3 autres ont comme valeur par défaut 0) !

1er attribut : la variable qui doit être filtrée.
2e attribut : le type de contenu (mettre 1 si c'est un nombre, sinon mettre 0)
3e attribut : activer le filtrage spécifique à la base de donnée (mettre 1 si vous utilisez cette variable dans une requête SQL, sinon 0)
4e attribut : activer le filtrage anti url (mettre 1 pour saborder toutes les url, sinon mettre 0). A utiliser pour les include() entre autres.

*/


function getval($var, $type=0, $bdd=0, $filtre_url=0)
{
    ///anti XSS
    if ($filtre_url == 0)
    {
    $value = ($type == 0) ? htmlspecialchars($var, ENT_NOQUOTES) : intval($var);
    }
    else
    {
    $value = ($type == 0) ? str_replace(array(':','/','.'), '', htmlspecialchars($var, ENT_NOQUOTES)) : intval($var);
    }
    
    ///anti injection SQL
	if ($bdd != 0)
	{
    	if (get_magic_quotes_gpc())
		{
		$value = stripslashes($value);
		}
    
    	if (function_exists('mysql_real_escape_string'))
    	{
    	$value = mysql_real_escape_string($value);
    	}
    	//pour version de PHP < 4.3.0 on utilise addslashes
    	else
		{
		$value = addslashes($value);
		}
	}
	
	///on retourne une valeur filtrée
	return $value;
}

?>
Cette fonction ne fait pas tout, il faut à côté de cela coder proprement.

Exemple : Dans une requête sql, lorsque vous attribuez une valeur à un champ, encadrez bien cette valeur par des guillemets simples (apostrophes). Certains les laissent tomber, grave erreur ! La protection anti injection sql est alors inefficace.