• STATISTIQUES
  • Il y a eu un total de 2 membres et 11878 visiteurs sur le site dans les dernières 24h pour un total de 11 880 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Framework Metasploit
    Le Framework Metasploit est un logiciel gratuit, open source de tests de pénétration développ&ea...
    Vulnérabilités
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [EN] phrack
    Lot's of stuff !
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C]Saisie sécurisé?
24-11-2013, 16h47
Message : #1
Hypnoze57 Hors ligne
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>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int chiffre, nbChiffres, retourScanf, i=1;
    while(i){
        printf("Saisir un chiffre\n>");
        retourScanf = scanf("%d%n", &chiffre, &nbChiffres);
        scanf("*[^\n]");
        getchar();
        fflush(stdin);
        if(retourScanf==1 && nbChiffres==1){
            printf("Retour: %d\nNombre de chiffre saisis: %d\nChiffre saisie: %d", retourScanf, nbChiffres, chiffre);
            i=0;
        } else {
            printf("Erreur de saisie.\n");
        }
    }
    return 0;
}
Make your own destiny now and forever !
+1 (0) -1 (0) Répondre
24-11-2013, 18h51
Message : #2
Creepy_p0ney Hors ligne
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/
+1 (3) -1 (0) Répondre
24-11-2013, 19h32
Message : #3
c4ffein Hors ligne
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
+1 (0) -1 (0) Répondre
24-11-2013, 19h44
Message : #4
supersnail En ligne
É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
+1 (0) -1 (0) Répondre
24-11-2013, 20h36
Message : #5
c4ffein Hors ligne
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?
+1 (0) -1 (0) Répondre
24-11-2013, 20h41
Message : #6
Hypnoze57 Hors ligne
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 !
+1 (0) -1 (0) Répondre
24-11-2013, 21h24 (Modification du message : 24-11-2013, 21h28 par Sh4dows.)
Message : #7
Sh4dows Hors ligne
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 !
+1 (0) -1 (0) Répondre
24-11-2013, 21h49
Message : #8
Hypnoze57 Hors ligne
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 !
+1 (0) -1 (0) Répondre
24-11-2013, 21h50 (Modification du message : 24-11-2013, 21h59 par Commodor.)
Message : #9
Commodor Hors ligne
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;
int chiffre=0;

scanf("%1[^\n]", &num);  // récupération de 1 octet (et tant qu'on appuie pas sur 'ENTER' (facultatif))
chiffre = atoi(&num);         // ascii to integer

printf("chiffre = %d\n", chiffre);
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
24-11-2013, 22h37
Message : #10
gruik Hors ligne
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)
+1 (5) -1 (0) Répondre
25-11-2013, 09h27
Message : #11
Hypnoze57 Hors ligne
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 !
+1 (0) -1 (0) Répondre
25-11-2013, 09h42
Message : #12
supersnail En ligne
É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' Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
25-11-2013, 17h38
Message : #13
crown Hors ligne
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 !
Et gruik je voulais savoir dans ta ligne : "num = charnum - 0x30;" que signifie 0x30?

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.
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 4 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut