Bonjour,
j ai réalisé un script CGI en C. Comment tester la sécurité du script?
merci
Bonjour,
j ai réalisé un script CGI en C. Comment tester la sécurité du script?
merci
Salut
Pour les CGI C, on dit pas "script" mais "programme".
Apres, pour ton programme, ça depend ce qu'il fait
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...Envoyé par ankou82
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)ou
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);
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);
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, 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.
Envoyé par Gruik
oui je ne me connecte absolument a rien je genere seulement une image rien de plus.
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.Envoyé par Gruik
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
Envoyé par Gruik
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...)
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.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 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.)
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...Envoyé par Gruik
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![]()
Bien sûr, cette solution ne promet pas de gérer tous les débordement. Seulement les débordements locaux...Envoyé par gege2061
Tu me diras c'est déjà ca!
Jc
Bonjour,
Que pensez vous de la méthode de récupératon de parametre a la fin de cette page : Hop
Quand je vois çà :Envoyé par ankou82
En général, je ne vais pas plus loin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void main() {
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)
Donc ce code est vulnerable
sans oublier que plus haut dans la page on peux lire:
moi ca me dis rien de bon quant a la suite (que je prend pas la peine de lire).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char temp[1024]; scanf("%s",temp);
oui mais alors comment recuperer la chaine envoyé au programme CGI?
![]()
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.
Partager