Retourne une mauvaise valeur - PHP - Programmation
Marsh Posté le 17-03-2005 à 10:24:45
Je precise que je passe le montant de ma commande en url du type
"montant=777"
Marsh Posté le 17-03-2005 à 10:34:18
Ben ... ton script doit certainement diviser cette somme par 100 quelquepart ... forcément ...
Vérifie bien le script.
Edit : Euh ... je sais pas, mais pour moi ça me semble assez abérant de passer le motant par l'url non ?
Marsh Posté le 17-03-2005 à 10:42:49
Quand je regarde la forme d'url que veut le prestataire qui s'occupe du paiement et bien il y a le montant dans l'url.
Marsh Posté le 17-03-2005 à 10:44:39
Tout dans l'URL Tu commandes pour 1000 euros de matos pis tu trafiques l'URL en mettant 10 euros et hop, 990 euros de réduc
J'veux l'adresse, vite !@#
Marsh Posté le 17-03-2005 à 10:56:14
c'est pas un site ou on achete des choses c'est un concept particulier
Marsh Posté le 17-03-2005 à 10:57:12
C'est sûr que c'est particulier, comme concept Jusque dans la réalisation
Sérieux, c'est pas du tout sécurisé, comme méthode, fais ça autrement
Marsh Posté le 17-03-2005 à 10:57:25
C'est pas du tout aberrant, ça marche souvent comme ça.
Mais il y a un "secret" connu uniquement du système de paiement et au marchand et propre à chaque marchand qui permet de faire passer avec les paramètres un checksum de vérification.
Donc pas d'inquiétudes quant à la sécurité.
Il n'a pas dit qu'il passait juste le prix
Marsh Posté le 17-03-2005 à 10:59:16
skynicko a écrit : Bonjour |
Certains systèmes de paiement demande en fait le prix en centimes. Donc pour 1 euro faut envoyer 100 comme valeur du prix.
Ca doit être indiqué dans la doc de l'API du module de paiement que tu appelles (c'est quelle banque ?).
Marsh Posté le 17-03-2005 à 10:59:23
Un checksum, comment c'est trop secure
Non mais sérieux, faut arrêter Si tous les prix sont dans une base, il suffit de faire passer le panier et de calculer le montant total dans le script côté serveur, hein Sa mange pas plus de pain.
Après, si les prix sont en dur dans le code HTML, effectivement...
Marsh Posté le 17-03-2005 à 11:00:28
En fait la boite ou je suis ils font du conseil par telephone. Et le site que j'ai fait, le conseiller rentre le montant de la consultation téléphonique puis il arrive à la page de paiement et il saisi le numero de carte bleu du client.
Que pensez vous cette idée ??
Moi personellement je suis en stage donc je leur fait ce qu'il demander et pi quoiqu'il arrive je suis payé pareil
Marsh Posté le 17-03-2005 à 11:01:12
skynicko a écrit : et pi quoiqu'il arrive je suis payé pareil |
Marsh Posté le 17-03-2005 à 11:01:31
ratibus a écrit : Certains systèmes de paiement demande en fait le prix en centimes. Donc pour 1 euro faut envoyer 100 comme valeur du prix. |
C'est kadishop mais comme y'a tres peu de documentation je vais leur envoyer un mail
Marsh Posté le 17-03-2005 à 11:01:37
Oui mais quand même il doit bien y avoir moyen de récuperer lem ontant sans le passer par l'URL ... je me doute bien qu'il y ai un système derrière, mais quand même ... ça fait super crade je trouve ...
Enfin bref, quoiqu'il en soit, pour passer de 400 à 4 c'est qu'il y a forcement une kooye dans le script, le tout est de trouver où.
Regardes bien partout où est traitée ta variable, décode ton script pas à pas, tu devrais bien finir par trouver ...
On peut l'avoir d'ailleurs le code source de la page s'il n'est pas trop gros ?
Merci.
EDIT : Vache ... le temps d'ecrire un message, il y en a 200 qui s'intercalent ...
Marsh Posté le 17-03-2005 à 11:02:47
ReplyMarsh Posté le 17-03-2005 à 11:35:10
Taiche a écrit : Un checksum, comment c'est trop secure |
Par curiosité, tu reproches quoi au checksum ?
Marsh Posté le 17-03-2005 à 11:37:17
ratibus a écrit : Par curiosité, tu reproches quoi au checksum ? |
Que si on parle bien de la même chose, alors n'importe qui est capable de passer le checksum de 10 au lieu de 1000 dans l'URL
Et par curiosité, tu reproches quoi à la méthode de ne passer que le panier et de calculer le prix dans le script ?
Marsh Posté le 17-03-2005 à 11:42:59
c'est la guerre des reproches par ici. J'ai résolu mon probleme. En fait j'ai rajouté un champ centimes.
Comme ça j'envoies les euros et les centimes et j'ai plus de probleme.
Marsh Posté le 17-03-2005 à 11:47:33
Je parle de ceci :
Un internaute va sur un site marchand, il fait son shopping. Il finit par aller sur la page de confirmation de commande qui le redirige vers un module de paiement bancaire.
C'est de cette redirection dont je parle
Dans l'url tu as un truc dans le genre par exemple (j'ai simplifié à l'extrême les paramètres) :
url_banque?prix=15&transaction_id=878975&checksum=511e33b4b0fe4bf75aa3bbac63311e5a
Le processus de génération d'un checksum valide n'est réalisable que par le marchand et la banque. Par exemple : md5(informations + secret). Sans connaître le secret tu peux pas changer changer le prix dans l'url et mettre le checksum associé.
Marsh Posté le 17-03-2005 à 11:47:52
Et fallait mettre le montant en centimes d'euros dans l'url m'a répondu monsieur kadishop. Je pouvais la chercher longtemps la division par 100
Marsh Posté le 17-03-2005 à 11:49:15
ratibus a écrit : |
et les keygens pour pirater les jeux je suppose que ca existe pas non plus ?
j'y connais pas grand chose en securité, mais il me semble qu'une regle de bon sens est tout simplement d'en cacher le plus possible. Les trucs qui se baladent en clair, bof.
Marsh Posté le 17-03-2005 à 11:51:44
skynicko a écrit : Et fallait mettre le montant en centimes d'euros dans l'url m'a répondu monsieur kadishop. Je pouvais la chercher longtemps la division par 100 |
Je t'avais donné la solution
T'as pas du la voir
Marsh Posté le 17-03-2005 à 11:54:26
chrisbk a écrit : et les keygens pour pirater les jeux je suppose que ca existe pas non plus ? |
Salut
Justement c'est le contraire
Ca sert à rien de cacher
Avec la méthode du secret partagé que j'ai exposée, tu peux passer tous les paramètres que tu veux tu n'auras jamais aucun problème, du moment que les différentes entités qui dialoguent vérifient le checksum à chaque fois.
Marsh Posté le 17-03-2005 à 11:58:41
ratibus a écrit : Je parle de ceci : |
C'est parfaitement crackable, ne serait-ce que parce que MD5 est un algo de hashage, ce qui signifie qu'il est possible de trouver le bon "secret" correspondant à l'info que tu veux passer pour obtenir un MD5 voulu. Il existe d'ailleurs des softs pas très légaux qui font ça...
Ce que je veux dire, surtout, c'est pourquoi ouvrir un trou de sécu alors qu'une méthode toute con comme faire une requête en base de données s'avère bien moins risquée ?
Marsh Posté le 17-03-2005 à 11:59:57
ratibus a écrit : Salut |
je doute
ratibus a écrit : |
Si je ne sais pas ou t'habite, je ne peux pas venir tout casser chez toi
ratibus a écrit : |
si j'ai bien tout suivi, ton truc n'est valable que tant que la methode de checksum reste inconnue, apres, bonjour les degats (et j'aime pas les "il faut que" et "il suffit que", generalement ca se barre tot ou tard en coyons). Ce qui fait que ton algo de checksum doit
->avoir peu de collision (deja ca c'est tout un boulot)
->etre inconnu du vaste monde
ca me fait un peu peur
Marsh Posté le 17-03-2005 à 12:02:47
Taiche a écrit : C'est parfaitement crackable, ne serait-ce que parce que MD5 est un algo de hashage, ce qui signifie qu'il est possible de trouver le bon "secret" correspondant à l'info que tu veux passer pour obtenir un MD5 voulu. Il existe d'ailleurs des softs pas très légaux qui font ça... |
Bon courage si tu veux faire du brute-force sur un hash en sha1 par exemple
La chaine dont tu fais le hash fait plusieurs dizaines de caractères c'est impossible à brute-forcer dans un temps "humainement acceptable".
Marsh Posté le 17-03-2005 à 12:03:57
chrisbk a écrit : je doute |
Si je te dis que ma méthode de hash c'est md5 ou sha1, tu vas faire quoi ?
Marsh Posté le 17-03-2005 à 12:07:31
ratibus a écrit : Bon courage si tu veux faire du brute-force sur un hash en sha1 par exemple |
Je suis d'accord mais ça répond pas, pour la deuxième fois, à ma question qui est : pourquoi utiliser cette méthode soi-disant incrackable alors qu'une bête requête en base serait déjà bien moins dangereuse ?
Et puis les trucs qui peuvent pas être crackés en mars 2005 seront-ils toujours aussi fiables en octobre 2007 ? Enfin quoi, combien de fois faudra-t-il que les gens tombent dans le panneau "mon système est incrackable, donc je m'en fous" avant de commencer à envisager d'autres possibilités d'implémentation ?
Marsh Posté le 17-03-2005 à 12:09:24
Imaginons que la chaine dont je fais le hash fasse 20 caractères alpha-numérique (soit 36 caractères). L'espace de recherche est donc 36^20 soit 13 367 494 538 843 734 067 838 845 976 576 combinaisons à tester.
Supposons que tu arrives à calculer 10^12 hash par seconde.
Il te faut 423 880 471 171 années pour tout calculer
C'est plus que l'âge de l'univers
Marsh Posté le 17-03-2005 à 12:12:11
Taiche a écrit : Je suis d'accord mais ça répond pas, pour la deuxième fois, à ma question qui est : pourquoi utiliser cette méthode soi-disant incrackable alors qu'une bête requête en base serait déjà bien moins dangereuse ? |
Le système de paiement est toujours décorrellé du système du marchand. La banque est juste là pour dire "Merci de regler le montant de X euros pour le compte du marchand Y". La banque renvoie l'info du résultat du paiement au marchand sur une url définie (avec le même principe de checksum).
Marsh Posté le 17-03-2005 à 12:12:17
Oui ... sauf que si en 2012 ils découvrent qu'on peut faire des PC qui décodent 36^20 combinaisons en 1 semaine ?
Il faudrait peut etre penser à voir sur le moyen/long terme non ?
Chez moi j'ai un systeme d'alarme, c'est pas pour ça que je donne mon adresse à tout le monde ...
Marsh Posté le 17-03-2005 à 12:14:22
ratibus a écrit : Si je te dis que ma méthode de hash c'est md5 ou sha1, tu vas faire quoi ? |
Te dire que MD5 a déjà implosé et que la communauté crypto attend actuellement le papier d'une équipe chinoise qui affirme avoir cassé le SHA-1
(je ne parle pas de brute force ici, mais bien d'algos de hash cassés)
Actuellement, il est recommandé d'abandonner au plus vite MD5 et SHA-1 et de passer à SHA-256 ou SHA-512
Marsh Posté le 17-03-2005 à 12:14:55
Dj YeLL a écrit : Oui ... sauf que si en 2012 ils découvrent qu'on peut faire des PC qui décodent 36^20 combinaisons en 1 semaine ? |
Tu réalises vraiment pas (c'est pas une critique juste un constat) combien ça fait 36^20
Marsh Posté le 17-03-2005 à 12:15:34
ratibus a écrit : Le système de paiement est toujours décorrellé du système du marchand. La banque est juste là pour dire "Merci de regler le montant de X euros pour le compte du marchand Y". La banque renvoie l'info du résultat du paiement au marchand sur une url définie (avec le même principe de checksum). |
J'pige pas ta réponse en rapport avec ma question de base : pourquoi la requête SQL c'est mal ?
Marsh Posté le 17-03-2005 à 12:17:40
ratibus a écrit : Tu réalises vraiment pas (c'est pas une critique juste un constat) combien ça fait 36^20 |
sachant qu'y a deja des algos de collision pour le md5 et que recemment qqun a trouver comment diminuer le nombre de possibilité a tester pour le SHA-1, jferais ptet pas autant le fanfarron
Marsh Posté le 17-03-2005 à 12:20:27
chrisbk a écrit : sachant qu'y a deja des algos de collision pour le md5 et que recemment qqun a trouver comment diminuer le nombre de possibilité a tester pour le SHA-1, jferais ptet pas autant le fanfarron |
Comme je l'ai dit ci-dessus, en plus de la réduction de champ sur SHA-1 une équipe chinoise affirme avoir trouvé des algos de collision dessus...
Marsh Posté le 17-03-2005 à 12:24:16
ratibus a écrit : Imaginons que la chaine dont je fais le hash fasse 20 caractères alpha-numérique (soit 36 caractères). L'espace de recherche est donc 36^20 soit 13 367 494 538 843 734 067 838 845 976 576 combinaisons à tester. |
Soit, selon la loi de Moore, la moitié dans 6 mois, le 1/4 dans 1 an etc.
A supposer que d'ici quelques années on ne fasse pas de découverte majeure dans le domaine de l'architecture des procs.
Attention à ce genre de considérations... rappelle toi dans les années 80 les ptits futés de 14 ans qui crackaient des sites secret-défense avec leur Alice ou leur C64. Même si c'est statistiquement peu probable, ça n'en reste pas moins réalisable.
Marsh Posté le 17-03-2005 à 12:27:27
Taiche a écrit : J'pige pas ta réponse en rapport avec ma question de base : pourquoi la requête SQL c'est mal ? |
Seul le marchand connait le prix de ses produits.
La banque (et son sytème de paiement) n'ont pas accès à cette base de données => pas de requete SQL.
Si le marchand propose au client de saisir ses infos bancaires sur son site (et d'appeler la banque en interface directe et donc de manière transparente pour le client), alors bien sûr il faut faire comme ça
Marsh Posté le 17-03-2005 à 12:32:55
Moktar1er a écrit : Soit, selon la loi de Moore, la moitié dans 6 mois, le 1/4 dans 1 an etc. |
En 20 ans tu divises par 10^6 la durée "seulement".
Marsh Posté le 17-03-2005 à 12:33:12
Un excellent article : http://www.schneier.com/blog/archi [...] sis_o.html
Citation : One-way hash functions are supposed to have two properties. One, they're one way. This means that it is easy to take a message and compute the hash value, but it's impossible to take a hash value and recreate the original message. (By "impossible" I mean "can't be done in any reasonable amount of time." ) Two, they're collision free. This means that it is impossible to find two messages that hash to the same hash value. |
Marsh Posté le 17-03-2005 à 10:21:04
Bonjour
J'ai un site de paiement en ligne, quand je valide ma commande et que j'arrive sur la page où l'on rentre le numero de CB j'ai un probleme.
Si le montant de ma commande vaut 100 euros, la page SSL me dit que la valeur veut 1 euros et ainsi de suite (200=2, 400=4, 222=2,22).
J'ai mis un type int et je me demande comment je peux me retrouver avec un float.
Quelqu'un a t'il déjà rencontré ce problème ?
Message édité par skynicko le 17-03-2005 à 10:26:39