[C]Saisie sécurisé?
|
24-11-2013, 16h47
Message : #1
|
|
Hypnoze57
Web Hacker Messages : 98 Sujets : 13 Points: 28 Inscription : Feb 2012 |
[C]Saisie sécurisé?
Bonjour à tous, j'essaie depuis quelques jours de créer une saisie le plus sécurisé possible en c. J'ai plusieurs questions sur mon code:
- getchar() est réellement nécessaire? - Pourquoi la saisie d'une chaine commençant par un chiffre fonctionne elle quand même? Code: Code : #include <stdio.h> Make your own destiny now and forever !
|
|
24-11-2013, 18h51
Message : #2
|
|
Creepy_p0ney
chef des poneys voodoo Messages : 146 Sujets : 9 Points: 24 Inscription : Dec 2011 |
RE: [C]Saisie sécurisé?
Salut, la saisie d'une chaine commençant par un chiffre fonctionne quand même car le formateur "%s" indique à la fonction qu'elle doit attendre une chaine, c'est à dire, n'importe quel caractère dans la table ascii, et les chiffres sont codés dedans : http://www.asciitable.com/. Pour ton getchar, je n'en sais rien, mais tu peux faire une fonction de saisie avec fgets ou read qui ne depasse pas un certain nombre d'octet, ensuite si tu veux un int, un long ou autre, tu utilises une fonction de conversion. POur plus d'information http://fr.openclassrooms.com/informatiqu...ce-a-fgets (je vais me faire taper sur les doigts)
En esperant avoir pas trop dit de conneries et être comprehensible.
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/ |
|
24-11-2013, 19h32
Message : #3
|
|
c4ffein
Membre Messages : 49 Sujets : 2 Points: 5 Inscription : Jul 2013 |
RE: [C]Saisie sécurisé?
Perso je te conseillerai de faire une version windows de ta fonction avec l api win32, et une version unix-like avec le syscall read pour recuperer la chaine de caracteres ascii, puis de le convertir en int toi meme. Pour t inspirer : http://n-pn.fr/forum/showthread.php?tid=3391
|
|
24-11-2013, 19h44
Message : #4
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: [C]Saisie sécurisé?
WAT ??!??!
Pourquoi s'e**erder à distinguer windows/*nix ici alors que les fonctions fgets/strtol et compagnie font partie de la lib C standard et son dispo sur tous les OS (y compris win32, c'est dans msvcrt.dll) ? D'autant plus que le propos ici est de sécuriser un input, pas de recoder fgets ou je ne sais quoi d'autre ...
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
24-11-2013, 20h36
Message : #5
|
|
c4ffein
Membre Messages : 49 Sujets : 2 Points: 5 Inscription : Jul 2013 |
RE: [C]Saisie sécurisé?
J'ai lu un peu trop vite, je croyais qu'il voulait créer une fonction pour récuperer un nombre. Juste, quand strtol renvoie 0, il suffit de comparer errno a EINVAL et ERANGE pour savoir si l utilisateur a entré 0 ou une chaine malformée?
|
|
24-11-2013, 20h41
Message : #6
|
|
Hypnoze57
Web Hacker Messages : 98 Sujets : 13 Points: 28 Inscription : Feb 2012 |
RE: [C]Saisie sécurisé?
Je me suis peux être mal exprimé, je cherche à récupérer un chiffre et un seul. Mais lorsque je rentre une chaine de caractère qui commence par un chiffre, la condition est vérifié. Exemple: 5rfe/'rf('-è-(t0gt-46èunh5bgf
Make your own destiny now and forever !
|
|
24-11-2013, 21h24
(Modification du message : 24-11-2013, 21h28 par Sh4dows.)
Message : #7
|
|
Sh4dows
Tweetos Messages : 293 Sujets : 5 Points: 49 Inscription : Dec 2012 |
RE: [C]Saisie sécurisé?
Faites ce que je dis et non ce que je fais !
|
|
24-11-2013, 21h49
Message : #8
|
|
Hypnoze57
Web Hacker Messages : 98 Sujets : 13 Points: 28 Inscription : Feb 2012 |
RE: [C]Saisie sécurisé?
Ah oui je comprend ! Merci pour vos réponses, j'essayerai de corriger sa demain, via les regex sa doit être possible non?
Make your own destiny now and forever !
|
|
24-11-2013, 21h50
(Modification du message : 24-11-2013, 21h59 par Commodor.)
Message : #9
|
|
Commodor
Ho ! Dodgson ! Messages : 64 Sujets : 9 Points: 36 Inscription : Nov 2011 |
RE: [C]Saisie sécurisé?
scanf peut récupérer un seul octet. Si tu comptes en base 10 (donc un seul chiffre, pas nombre) l'appel de atoi convient.
Code : char num;
Hahaha you didn't say the magic word !
|
|
24-11-2013, 22h37
Message : #10
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: [C]Saisie sécurisé?
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
25-11-2013, 09h27
Message : #11
|
|
Hypnoze57
Web Hacker Messages : 98 Sujets : 13 Points: 28 Inscription : Feb 2012 |
RE: [C]Saisie sécurisé?
Merci Commodor !
Et gruik je voulais savoir dans ta ligne : "num = charnum - 0x30;" que signifie 0x30? Make your own destiny now and forever !
|
|
25-11-2013, 09h42
Message : #12
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: [C]Saisie sécurisé?
0x30 = le code ASCII pour le caractère '0'
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
25-11-2013, 17h38
Message : #13
|
|
crown
Membre actif Messages : 52 Sujets : 5 Points: 18 Inscription : Oct 2011 |
RE: [C]Saisie sécurisé?
(25-11-2013, 09h27)Hypnoze57 a écrit : Merci Commodor ! Les chiffres de 0-9 sont représentés en hex par 0x3[0-9] donc en faisant la différence entre, par exemple : 0x39 (9 en décimal) et 0x30, tu obtiens le nombre en hex == à celui en décimal. |
|
Utilisateur(s) parcourant ce sujet : 3 visiteur(s)