IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[Cgi] Sécurité du Programme c


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut [Cgi] Sécurité du Programme c
    Bonjour,


    j ai réalisé un script CGI en C. Comment tester la sécurité du script?

    merci

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut

    Pour les CGI C, on dit pas "script" mais "programme".

    Apres, pour ton programme, ça depend ce qu'il fait

  3. #3
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    le programme crée un image et l affiche.

    je récupère donc des variables envoyé par post les traites puis je genere une image.

    C est sur la recuperation des données que j aimerais tester la sécurité.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ankou82
    le programme crée un image et l affiche.

    je récupère donc des variables envoyé par post les traites puis je genere une image.

    C est sur la recuperation des données que j aimerais tester la sécurité.
    Il faut tester les entrées dans les conditions extrèmes, et vérifier que jamais un seul tableau de char ne déborde, par exemple...

    Personellement, je pose un piège comme ceci :

    Quand un tableau de N char est créé, je met un 0 en [N-1].
    Après chaque écriture, je vérifie la présence du 0 et j'arrête l'exécution si il n'y est plus. Ce n'est pas du 100%, mais ça fait le ménage...

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module SYS (sys.h)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /* controles */
    #define LIM_STR(s) (s)[sizeof (s) - 1]=0
    #define CHK_STR(s) ASSERT((s)[sizeof (s) - 1]==0)
     
    #ifndef NDEBUG
    #define LIM_PTR(p,l) (p)[(l) -1]=0
    #else
    #define LIM_PTR(p,l)
    #endif
    #define CHK_PTR(p,l) ASSERT((p)[(l) -1]==0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       char s[128];
       LIM_STR(s);
    ...
       sprintf (s, ...);
       CHK_STR(s);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       size_t n = 128;
       char s = malloc (n);
       LIM_PTR (s, n);
    ...
       sprintf (s, ...);
       CHK_PTR (s, n);
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Je dirais que seul celui qui a fait le programme peut le tester et savoir ce qui peut être vulnerable
    Si tu n'executes pas de programme externes, que tu n'accedes pas aux fichiers, que tu ne te connecte pas à une base, alors il n'y a peut être pas de faille, juste des plantages possible

  6. #6
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Oui, mais moi en faite ma page php genere un formulaire, et celon le formulaire lorsque je fais mon submit le programme CGI est lancé et récupaire les informations du formulaire.

    je recupere donc la chaine envoyé par cgi, et je l'a traite.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Gruik
    Je dirais que seul celui qui a fait le programme peut le tester et savoir ce qui peut être vulnerable
    Si tu n'executes pas de programme externes, que tu n'accedes pas aux fichiers, que tu ne te connecte pas à une base, alors il n'y a peut être pas de faille, juste des plantages possible

    oui je ne me connecte absolument a rien je genere seulement une image rien de plus.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gruik
    Je dirais que seul celui qui a fait le programme peut le tester
    Grave erreur. Ca va à l'encontre de tous les principes de codage sécuritaire. On doit travailler en binôme. Un qui code, un qui teste. Et penser à inverser les rôles régulièrement.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Oui c'est vrai
    Mais, je crois pas que ça soit applicable en pratique
    A moins que le testeur passe beaucoup de temps à analyser le fonctionnement du truc. En gros, le testeur doit relire le code écrit et le comprendre pour tester les cas problématiques.
    Sinon, le testeur ne teste que les cas nominaux et ça sert pas à grand chose car la programmeur aurait au moins vérifié que ça marchait

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gruik
    Mais, je crois pas que ça soit applicable en pratique
    C'est un des axiomes de base de la méthode XP... (appliquée partout dans le monde, sauf évidemment en France, pays des irreductibles Gaulois...)
    A moins que le testeur passe beaucoup de temps à analyser le fonctionnement du truc. En gros, le testeur doit relire le code écrit et le comprendre pour tester les cas problématiques.
    Sinon, le testeur ne teste que les cas nominaux et ça sert pas à grand chose car la programmeur aurait au moins vérifié que ça marchait
    Un des buts de l'opération (voir Méthode XP) est que le code soit lisible et donc que la lecture par le testeur soit aisée.

    Un des corrollaires est que la connaissance est partagée, ce qui assure une meilleure continuité du projet en cas de retrait rapide d'un des acteurs (Maladie, décès, licenciement etc.)
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Ok
    Mais c'est pas moi qui decide comment on doit travailler et faut avouer que ça prend plus de temps

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gruik
    Ok
    Mais c'est pas moi qui decide comment on doit travailler et faut avouer que ça prend plus de temps
    Nul ne peut contester que la sécurité a un coût mais celui-ci est maîtrisable. Par contre, l'absence de sécurité a aussi un coût et il peut être exorbitant ! A vos calculettes...
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Le second problème après le dépassement de capacité des tableaux c'est au niveau des allocations mémoire.
    Tu peux t'amuser à créer un gestionnaire de mémoire (basé sur malloc/free) qui se charge de sauvegarder les allocations faites pour vérifier si c'est les bonnes adresses qui sont libérées, quand elles le sont et aussi allouer un peu plus de mémoire (en amont et en aval de la zone allouée) pour vérifier qu'il n'y a pas de débordement (initialisation des zones tampons et ensuite tu verifie que leur contenu n'a pas changé).

    C'est un peu long à faire mais c'est très puissant (et ça te donne de la lecture )

    J'en ai fait un, il faudrait que j'arrive à remplacer les fonctions de la glib (utilisation d'une liste doublement chaînée) par ma propre bibliothèque et je le posterai

  14. #14
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par gege2061
    pour vérifier qu'il n'y a pas de débordement (initialisation des zones tampons et ensuite tu verifie que leur contenu n'a pas changé).
    Bien sûr, cette solution ne promet pas de gérer tous les débordement. Seulement les débordements locaux...

    Tu me diras c'est déjà ca!

    Jc

  15. #15
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Bonjour,


    Que pensez vous de la méthode de récupératon de parametre a la fin de cette page : Hop

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ankou82
    Que pensez vous de la méthode de récupératon de parametre a la fin de cette page : Hop
    Quand je vois çà :
    En général, je ne vais pas plus loin.

    D'autre part, l'auteur semble ignorer l'existence de la fonction strtoul()...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     /* Convertit un nombre hexadecimal a deux "chiffres" en un caractere usuel */
    char hex2dec(char s0, char s1)
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Donc ce code est vulnerable

  18. #18
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    sans oublier que plus haut dans la page on peux lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     char temp[1024];
    scanf("%s",temp);
    moi ca me dis rien de bon quant a la suite (que je prend pas la peine de lire).
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  19. #19
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    oui mais alors comment recuperer la chaine envoyé au programme CGI?


  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    fgets().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Android] Besoin d' aide - Sécurité en programmation android
    Par Ado_88 dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 16/09/2014, 10h27
  2. CGI Perl + execution programme
    Par UonaN dans le forum Web
    Réponses: 3
    Dernier message: 28/11/2007, 13h28
  3. Sécurité sur programme Shell
    Par coincoin22 dans le forum Linux
    Réponses: 9
    Dernier message: 30/08/2007, 19h07
  4. Lancer un programme depuis un CGI
    Par cyberteuf dans le forum Web
    Réponses: 0
    Dernier message: 08/08/2007, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo