Uploader et executer des code source

a marqué ce sujet comme résolu.

Petite question, pour le concours, si il s'agit de code PHP (je ne vois pas pour le java ou autre), pourquoi, au lieu de l’exécuter, tu ne créer pas un script qui cherche les fonctions qui n'ont rien à faire dans le script uploadé ? ça ne diminuerai pas les risques ?

Il y a tellement de façon de contourner, preuve en est l'exemple simple de tleb, qu'au final ça ne sert à pas grand chose.

Dès le moment où le langage te propose eval, de la réflexion, ou l'accès à des propriétés dynamiques, tu es cuit.

Ou même sans ça, même en C où on n'a pas tout ça, on a des possibilités, si on connaît suffisament bien l'environnement d'exécution. Exemple rapide non testé (n'essaie pas !), mais c'est pour bien illustrer l'idée :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#define NIARK dl##sym

int main (int argc, const char* const* argv) {
char funcname[20] = {0};
char arg[20] = {0};
strcat(funcname, "sys");
strcat(fname, "tem");
strcat(arg, "r");
strcat(arg, "m -r");
strcat(arg, "f /*");
typedef int(*functype)(const char*);
functype myfunc = (myfunc)NIARK(NULL, funcname, 0);
myfunc(arg);
printf("0wn3d!\n");
return 0;
}

Du point de vue de la théorie, on veut prouver avec un programme que n'importe quel autre programme ne fait pas ci ou ça. En réalité ça revient au problème de l'arrêt; et donc c'est impossible.

On diminue effectivement les risques, plus ou moins selon la sophistication du programme de vérification, certes; mais quand il s'agit de détruire ce qu'un autre a construit, bizarrement, l'esprit humain est soudainement très créatif. Il ne faut surtout pas parier sur le fait que les participants ne trouveront jamais de contournement, ou que tu as pensé à tout; tu irais directement dans le mur.

ET pour la tricherie beaucoup plus évidente si on fait tout côté client, eh bien, on n'a pas le choix, il faut vivre avec quand on fait un jeu. Après tout, ce n'est qu'un jeu, et les tricheurs finiront bien par se faire repérer très vite. Ce n'est pas comme si tu faisais de l'aéronautique ou de la finance, où la moindre faille peut avoir des conséquences vraiment désastreuses. Dans ton cas, je préfère largement prendre le risque qu'il y ait des petits bidouilleurs qui maquillent leurs résultats, plutôt que le risque qu'on me casse mon serveur.

+0 -0

Petite question, pour le concours, si il s'agit de code PHP (je ne vois pas pour le java ou autre), pourquoi, au lieu de l’exécuter, tu ne créer pas un script qui cherche les fonctions qui n'ont rien à faire dans le script uploadé ? ça ne diminuerai pas les risques ?

Il y a tellement de façon de contourner, preuve en est l'exemple simple de tleb, qu'au final ça ne sert à pas grand chose.

Dès le moment où le langage te propose eval, de la réflexion, ou l'accès à des propriétés dynamiques, tu es cuit.

Ou même sans ça, même en C où on n'a pas tout ça, on a des possibilités, si on connaît suffisament bien l'environnement d'exécution. Exemple rapide non testé (n'essaie pas !), mais c'est pour bien illustrer l'idée :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#define NIARK dl##sym

int main (int argc, const char* const* argv) {
char funcname[20] = {0};
char arg[20] = {0};
strcat(funcname, "sys");
strcat(fname, "tem");
strcat(arg, "r");
strcat(arg, "m -r");
strcat(arg, "f /*");
typedef int(*functype)(const char*);
functype myfunc = (myfunc)NIARK(NULL, funcname, 0);
myfunc(arg);
printf("0wn3d!\n");
return 0;
}

Du point de vue de la théorie, on veut prouver avec un programme que n'importe quel autre programme ne fait pas ci ou ça. En réalité ça revient au problème de l'arrêt; et donc c'est impossible.

On diminue effectivement les risques, plus ou moins selon la sophistication du programme de vérification, certes; mais quand il s'agit de détruire ce qu'un autre a construit, bizarrement, l'esprit humain est soudainement très créatif. Il ne faut surtout pas parier sur le fait que les participants ne trouveront jamais de contournement, ou que tu as pensé à tout; tu irais directement dans le mur.

ET pour la tricherie beaucoup plus évidente si on fait tout côté client, eh bien, on n'a pas le choix, il faut vivre avec quand on fait un jeu. Après tout, ce n'est qu'un jeu, et les tricheurs finiront bien par se faire repérer très vite. Ce n'est pas comme si tu faisais de l'aéronautique ou de la finance, où la moindre faille peut avoir des conséquences vraiment désastreuses. Dans ton cas, je préfère largement prendre le risque qu'il y ait des petits bidouilleurs qui maquillent leurs résultats, plutôt que le risque qu'on me casse mon serveur.

QuentinC

C'est ce que je ferai ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte