filtrage : meilleure solution ?

Eléphant du PHP | 52 Messages

01 mars 2006, 00:46

//fonction de filtrage (sécurité)
function getval($var,$type=0,$filtre_url=0)
{
	///anti XSS
	if ($filtre_url == 0)
	{
	$value = ($type == 0) ? htmlspecialchars($var, ENT_QUOTES) : intval($var);
	}
	else
	{
	$value = ($type == 0) ? str_replace(array(':','/','.'), '', htmlspecialchars($var, ENT_QUOTES)) : intval($var);
	}
	
	///anti injection SQL
	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;
}

salut

voici ma fonction de filtrage. Je viens d'y ajouter la partie anti injections SQL. Un dilemme arrive alors : j'avais opté dans la partie anti XSS pour l'utilisation de htmlspecialchars ENT_QUOTES ce qui signifie que les guillemets simples et doubles sont convertis en html. Ce choix n'est pas compatible avec la partie anti injections sql : vu qu'il n'y aura plus de guillemets, cette partie n'aura aucun effet sur le texte.
Il me faut donc choisir : soit je modifie mon htmlspecialchars ENT_QUOTES en htmlspecialchars ENT_NOQUOTES ce qui ne convertirait pas les guillemets et donnerait un sens à l'utilisation de la partie d'anti injections sql soit je supprime la partie anti injections sql fraîchement ajoutée.

Ma question est : est-ce qu'il est mieux de choisir la solution ENT_NOQUOTES combiné avec la nouvelle partie anti injections, ou de supprimer la partie anti injections sql et conserver mon htmlspecialchars ENT_QUOTES ? Quels sont les avantages et inconvénients à l'exception du fait que la conversion en html augmente pas mal le nombre de caractères par rapport à l'échappement ?


Merci d'avance pour vos réponses

cordialement

Patami

Eléphant du PHP | 52 Messages

01 mars 2006, 23:23

erf pas de réponse ... je ne suis pas spécialement pressé, mais dois-je comprendre que l'on a pas compris ma question ? Dois-je la reformuler ?

bonne soirée

patami

Mammouth du PHP | 19672 Messages

01 mars 2006, 23:38

Pour la sécurité anti-injection, regarde sur le site de PHPFrance à la rubrique tuto, celui sur les magic_quotes qui traite le sujet.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 52 Messages

02 mars 2006, 00:11

Je viens de relire le tuto de Damien, mais cela ne répond pas à ma question :\

Pour être bref, je demande s'il est mieux d'utiliser la solution des magic quotes ou la solution de transformation des quotes (simples et doubles) en html ? Pourquoi choisir l'une plutôt que l'autre à par le fait que l'on aura plus de caractères à enregistrer avec la solution du html ..

Eléphant du PHP | 52 Messages

05 mars 2006, 13:14

puis-je me permettre de demander votre avis sur mon message ? :merci:

Mammouth du PHP | 19672 Messages

05 mars 2006, 17:54

Oui, tu peux :langue:

À mon avis, je crois qu'il ne faut quand même pas non plus devenir paranoïaque à propos de l'injection SQL.

Le problème des apostrophes/guillemets, c'est d'abord de faire en sorte d'éviter les conflits à cause de collisions non souhaitées. L'utilisation de la méthode recommandée dans le tuto mentionné est une base. Ensuite, si tu fais un code propre, tu réduis très notablement les risques. Enfin, en traitant systématiquement les données et en ne faisant jamais confiance aux données envoyées, tu assures tes arrières.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: