Comment faire un code sécurisé non falsifiable?

Petit nouveau ! | 4 Messages

11 sept. 2008, 17:58

Bonjour,

Je suis en train de développer mon site de e-commerce, et je me trouve face à un problème de taille. Je souhaite envoyer aux clients des codes uniques (ex : 101042AB), et que ces derniers se connectent au site, entrent leur code, et puissent retirer leur commande.

Il est très important que ce code ne puisse être deviné par un robot! Ma question est la suivante : comment s'assurer qu'un robot ou qu'une personne ne puisse deviner ce code (est-il possible d'ejecter une adresse IP après 10 mauvaises tentatives par exemple) ?

Merci d'avance!!!
Modifié en dernier par djimaestro le 12 sept. 2008, 19:19, modifié 1 fois.

Eléphant du PHP | 169 Messages

11 sept. 2008, 18:08

(est-il possible d'ejecter une adresse IP après 10 mauvaises tentatives par exemple) ?
Oui.

Encode ton code d'accès en MD5 aussi pour l'envoi, c'est toujours plus sécurisé.

Petit nouveau ! | 4 Messages

11 sept. 2008, 20:38

Comment faire alors pour éjecter une adresse IP trop insistante?

Eléphanteau du PHP | 38 Messages

11 sept. 2008, 21:54

Salut,

Si tu as un système de sessions qui stocke déjà l'ip de l'utilisateur en cours, tu rajoutes juste le nombre de tentatives. Si tes sessions dans une bdd (par exemple) tu ajoutes un champ 'ip' (tu n'es pas obligé de passer par la bdd, c'est juste pour montrer l'idée).

A chaque login tu vérifies. Si tu ne stocke pas déjà l'ip bah... fait le.

Ensuite pour l'éjecter bah tu dois bien stocker les ips 'indésirables' quelques part ? tu vérifies si le visiteur en cours en fait partie. En gros c'est ce qui se fait pour les bannissements dans les forums.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 sept. 2008, 23:25

Utilise une connexion sécurisée avec un certificat SSL.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
AB
ViPHP | 5818 Messages

12 sept. 2008, 01:01

Pour les identifiants uniques très difficiles à deviner, il y a la fonction uniqid()

Petit nouveau ! | 4 Messages

12 sept. 2008, 08:45

Merci pour vos réponses!

Je ne suis pas certain que la connexion SSL soit utile, car chaque code ne sera utilisé qu'une seule fois. Donc si quelqu'un intercepte le code après son envoi, ce n'est pas bien grave car il ne sera déjà plus valable!
En gros, un ami vous offre un T-shirt, et vous propose de choisir votre taille directement sur le site. Il ne vous donne pas le T-shirt, mais une carte avec l'adresse du site et un code unique, correspondant à cette commande.
Vous vous connectez donc au site, tapez ce code, et tombez sur une page avec ce T-shirt et les différentes tailles dispo. Vous n'aurez plus qu'à choisir la votre, et vous le recevrez chez vous.

La peur que j'ai, c'est qu'il existe des programmes capables de faire dérouler une série de codes aléatoires, jursqu'à tomber sur un bon!
Je cherche donc une parade! la fonction uniqid() pour générer des clés uniques est intéressante, mais des clés de 13 caractères risquent d'être un peu lourdes à taper pour l'utilisateur...

Une solution? Je retiens pour l'instant celle du stockage d'adresse IP...

Eléphanteau du PHP | 17 Messages

12 sept. 2008, 09:33

J'avais à peu prés la même fonction dans un programme.

ce que je fesait je générer un code au format XXXX-XXXX-XXXX-XXXXX

Pour simplifier la saisie à la lecture de la "carte" j'avais choisi de n'utiliser que des majuscule et des chiffres et en evitant les caractéres pouvant poser problème ( O 0 U V L I 1) de mémoire.

je généré donc un code aléatoire et vérifié qu'il n'existait pas déjà.

voila le code est assez simple malheuresement je ne l'ai plus. bon courage

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

12 sept. 2008, 10:20

Tu peux générer une image d'un code aléatoire que le client voit et saisit dans un champ en plus de son code unique. Cela compliquera l'affaire pour les robots puisqu'ils sont aveugles.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
AB
ViPHP | 5818 Messages

12 sept. 2008, 16:34

mais des clés de 13 caractères risquent d'être un peu lourdes à taper pour l'utilisateur...
A mon avis c'est un faux problème. Pour faire un achat (payant) sur internet je rentre bien mes 16 numéros de carte bancaire + 3 (la clé au dos). Donc si c'est pour retirer un cadeau (gratuit) je me dis que la même contrainte ne devrait poser aucun problème :wink:

Mammouth du PHP | 843 Messages

12 sept. 2008, 17:21

comment veut tu te baser sur l'ip si c'est l'ami d'un client qui vient retirer sont produit ? le clients et son ami n'ont pas la même IP...

sinon dit nous en plus parce que c'est sources à embrouille ton truc...

1°) Quel sont les infos propre à l'ami du client dont tu dispose ? (rien que si email erroné donné par le client, un ami erroné possible put recevoir la commande...)

2°) L'IP oublie, c'est pas une solution dans ton cas. Dit nous plutôt comment ce connecte tes clients et comment procède tu avec les amis des client pour qu'il retire leur cadeau ?

Je dirai que dans ton cas, si l'ami du client est prévenu par email du cadeau, un lien avec md5 de la ref commande en paramètre à GET + mot de pass commande suffit simplement. Si envoi papier sur flyers du pass pour l'ami du client, alors la, il faut ecrire le pass sur le bon de commande...


Le mieux, utilise un superCRYPT :) tu cache une clé perso à toi et le numero de commande dans un cryptogramme de longueur de chaine convenable.

tu analyse coté server et le tour est joué ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

ViPHP
ViPHP | 5924 Messages

12 sept. 2008, 18:05

L'ip c'est complètement nul comme solution. De nombreux utilisateurs peuvent partager la même pour le cas de gros réseaux locaux, et elle peut changer toutes les cinq minutes pour des utilisateurs lambda…

ViPHP
AB
ViPHP | 5818 Messages

12 sept. 2008, 18:46

L'ip c'est complètement nul comme solution. De nombreux utilisateurs peuvent partager la même pour le cas de gros réseaux locaux, et elle peut changer toutes les cinq minutes pour des utilisateurs lambda…
... la deuxième éventualité serait fatale pour un utilisateur qui a rentré un premier code erroné et dont l'IP change juste après...

Petit nouveau ! | 4 Messages

12 sept. 2008, 19:10

Merci à nouveau pour vos réponses, et pour le suivi d'AB et sadeq.
En tout cas, effectivement, je peux opter pour un code à 13 caractères, mais comme ce code sera imprimé et remis sur un papier, attention comme dit phoeniix007 aux mélanges entre O 0 U V L I 1.
Par rapport à vos questions, je ne sais rien de l'ami du client! A part le code que son ami lui a transmis sur la carte.
La solution de crypter le numéro de commande et une clé perso est sympa! Ca évitera de sauvegarder une donnée en plus dans le base. Je pense donc qu'en demandant cette clé + à l'utilisateur de rentrer un code sur un captcha, je ne devrais pas avoir de problème!

Merci pour votre aide!