Sécuriser une query string ?

Invité
Invité n'ayant pas de compte PHPfrance

14 janv. 2010, 01:59

Hello tout le monde,

J'aimerai savoir ce que vous pensez de cette technique :
function protegeQueryString($array){
    $donnee = "";
    $retour = array();
    
    //Chaque parametre et valeur sont placés dans un tableau
    foreach($array as $k => $v){
        $donnee .= $k.$v;
        $retour[] = urlencode($k)."=".urlencode($v);
    }
    
    //ajout d'un dernier parametre pour authentifier l'url
    $crypt = md5($donnee);
    $retour[] = "sec=".$crypt;
    
    return join("&",$retour);
}
Bonne journée à vous.

Niuxe

ViPHP
ViPHP | 5462 Messages

14 janv. 2010, 15:46

tu pourrais utiliser
http_build_query

http://php.net/manual/en/function.http-build-query.php

Eléphant du PHP | 453 Messages

15 janv. 2010, 19:17

Hello Stealth35,

Je ne connaissais pas du tout cette fonction et je t'en remercie. Mais mon pseudo soucis concerne le hashage. Est ce une bonne chose ou pas ? À priori, je dirai que c'est pas mal, à postériori il se peut que ce ne soit pas une bonne idée. longueur de la chaine < 255. Je soumets ce script afin de savoir ce que vous en pensez.

Bonne soirée.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2010, 19:47

le soucis avec md5(), c'est que c'est du hashage (!= cryptage) et que tu ne pourras plus jamais obtenir l'inverse de ce que tu as hashé.
De plus, après un md5(), si c'est pour une url, un petit coup de base64_encode() permettrait d'éviter les caractères interdits dans les urls.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 52 Messages

16 janv. 2010, 17:13

Hello,

J'en comprend que tu veux faire un checksum des paramètres get pour t'assurer qu'ils n'ont pas été manipulés par l'internaute.

Ce peut être efficace mais cependant, si tu fais apparaître le checksum dans l'url tu donnes des indices aux éventuels manipulateurs :
1 - ils voyent qu'il y a une somme de controle
2 - les algos de sommes de contrôle sont assez facilement reconnaissables ou simplement en essayant les méthodes possibles en php, on peut les deviner

Je dirais donc que l'idée est bonne mais que ton utilisation en est trop légère pour être efficace.
Utilise soit des combinaisons de hashage pour complexifier la génération de la somme de contrôle ou utilise du cryptage avec clé que toi seul peut connaître.
Si tu utilisse du cryptage avec clé, la question sera de protéger la clé ;)

@+
PHP5 Zend certified Engineer

Eléphant du PHP | 453 Messages

18 janv. 2010, 10:14

Hello,
le soucis avec md5(), c'est que c'est du hashage (!= cryptage) et que tu ne pourras plus jamais obtenir l'inverse de ce que tu as hashé.
De plus, après un md5(), si c'est pour une url, un petit coup de base64_encode() permettrait d'éviter les caractères interdits dans les urls.
Je n'ai pas fait la relation avec le base64_encode et une querie string. Surtout que c'est logique. Bien que ce n'est pas ce que je recherche comme réponse à la base, je prend note de ta réponse car j'aurais peut être l'utiliser. Merci ^^
[...]
J'en comprend que tu veux faire un checksum des paramètres get pour t'assurer qu'ils n'ont pas été manipulés par l'internaute.
[...]
Exact.
Ce peut être efficace mais cependant, si tu fais apparaître le checksum dans l'url tu donnes des indices aux éventuels manipulateurs :
1 - ils voyent qu'il y a une somme de controle
2 - les algos de sommes de contrôle sont assez facilement reconnaissables ou simplement en essayant les méthodes possibles en php, on peut les deviner

Je dirais donc que l'idée est bonne mais que ton utilisation en est trop légère pour être efficace.
Utilise soit des combinaisons de hashage pour complexifier la génération de la somme de contrôle ou utilise du cryptage avec clé que toi seul peut connaître.
Si tu utilisse du cryptage avec clé, la question sera de protéger la clé ;)

@+
Si j'ajoute un peu de sel (implémenter un système) et que je change ma fonction de hashage en sha1, est ce qu'à ton avis la sécurité sera meilleur ?
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 5462 Messages

18 janv. 2010, 15:06

t'as d'autre type de hash sous php , blowfish par exemple qui comporte un salt en plus

Eléphant du PHP | 63 Messages

18 janv. 2010, 23:21

t'as d'autre type de hash sous php , blowfish par exemple qui comporte un salt en plus
Blowfish c'est pas du hashage :lol:

Concernant la sécurisation d'une query string je ne vois pas du tout l'intérêt ! Si ton application est bien conçue, tu contrôles tes entrées, tu n'as donc pas besoin de cryptage et/ou de hashage pour sécuriser tes données... Utilise des filtres et des validateurs sur les valeurs que tu lis et ça suffit.

Au passage, l'utilisation d'un cryptage sur tes query strings va réduire drastiquement tes performances. Quant à l'utilisation d'un hashage, bof, je ne vois pas bien l'intérêt. Quite à contrôler le hash, autant contrôler les données.

Si tu veux un cryptage simple (en fait il s'agit plutôt d'une obfuscation) tu peux effectuer un rot128 (à ne pas confondre avec un rot13) sur query string puis un encodage en base 64 (en n'oubliant pas de retirer les == s'ils sont présents) suivi d'un strrev. Je peux t'assurer que là, si tu ne divulges pas ton algo, très peu de gens vont comprendre de quoi il s'agit ! L'avantage de cette méthode (même si je te conseillerais plutôt de filtrer tes données) est qu'elle est peu couteuse en ressources et facile à mettre en place.

ViPHP
ViPHP | 5462 Messages

19 janv. 2010, 11:25

Blowfish c'est pas du hashage :lol:
oui, je me suis mélange les pinceaux #-o