Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
> elle est formée à partir des éléments donnés
Donnés par quoi ou par qui, ces éléments ?
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.
Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
> j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
> fonctions relatives, par exemple :
> do_search(params) | do_save(params) | do_edit(params) | do_view(params)
un truc du genre
function do_( f, p )
{
f = this['do_'+f];
return ( typeof f == 'function' ) ? f(p) : null;
}
do_( 'edit', params );
ou
window.do_( 'edit', params );
ou
element.do_ = window.do_;
element.do_edit = function (p) { /* code */ };
element.do_( 'edit', params );
ou prototype ... etc ...
A+
Bol
> j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
> fonctions relatives, par exemple :
> do_search(params) | do_save(params) | do_edit(params) | do_view(params)
un truc du genre
function do_( f, p )
{
f = this['do_'+f];
return ( typeof f == 'function' ) ? f(p) : null;
}
do_( 'edit', params );
ou
window.do_( 'edit', params );
ou
element.do_ = window.do_;
element.do_edit = function (p) { /* code */ };
element.do_( 'edit', params );
ou prototype ... etc ...
A+
Bol
> j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
> fonctions relatives, par exemple :
> do_search(params) | do_save(params) | do_edit(params) | do_view(params)
un truc du genre
function do_( f, p )
{
f = this['do_'+f];
return ( typeof f == 'function' ) ? f(p) : null;
}
do_( 'edit', params );
ou
window.do_( 'edit', params );
ou
element.do_ = window.do_;
element.do_edit = function (p) { /* code */ };
element.do_( 'edit', params );
ou prototype ... etc ...
A+
Bol
In article<1k4qxc3.1g01zop1qutu77N%,
(Une Bévue) wrote:j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)
comment kon fait ?
Bonjour ,
appel d'une fct par son nom ?
h='do_' + nom + '(' + params+ ');';
// nom = search ou edit ou ...
// pour fabriquer do_search(params);
// et
eval(h);
// pour exécuter
j'espere avoir compris la question
In article<1k4qxc3.1g01zop1qutu77N%unbewusst.sein@fai.invalid>,
unbewusst.sein@fai.invalid (Une Bévue) wrote:
j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)
comment kon fait ?
Bonjour ,
appel d'une fct par son nom ?
h='do_' + nom + '(' + params+ ');';
// nom = search ou edit ou ...
// pour fabriquer do_search(params);
// et
eval(h);
// pour exécuter
j'espere avoir compris la question
In article<1k4qxc3.1g01zop1qutu77N%,
(Une Bévue) wrote:j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)
comment kon fait ?
Bonjour ,
appel d'une fct par son nom ?
h='do_' + nom + '(' + params+ ');';
// nom = search ou edit ou ...
// pour fabriquer do_search(params);
// et
eval(h);
// pour exécuter
j'espere avoir compris la question
In article <4e28916c$,
Olivier Miakinen <om+ wrote:Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
mais ici ce n'est que du js inoffensif ...
In article <4e28916c$1@meta.neottia.net>,
Olivier Miakinen <om+news@miakinen.net> wrote:
Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
mais ici ce n'est que du js inoffensif ...
In article <4e28916c$,
Olivier Miakinen <om+ wrote:Le 21/07/2011 13:04, mb a écrit :
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
c'est vrai qu'une fct équivalente à eval en php serait
catastrophique
mais ici ce n'est que du js inoffensif ...
Le simple fait que vous ne voyez pas la différence entre la solution à
base de 'eval' et celles basées sur un switch ou une recherche dans un
tableau associatif montre que la solution à base de 'eval' est
dangereuse... puisque vous ne mesurez pas correctement les risques de
son utilisation.
[...]
> c'est vrai qu'une fct équivalente à eval en php serait
> catastrophique
> mais ici ce n'est que du js inoffensif ...
Javascript n'est pas inoffensif. Sinon pourquoi tenterait-on de bloquer
le cross-site scripting ?
Le simple fait que vous ne voyez pas la différence entre la solution à
base de 'eval' et celles basées sur un switch ou une recherche dans un
tableau associatif montre que la solution à base de 'eval' est
dangereuse... puisque vous ne mesurez pas correctement les risques de
son utilisation.
[...]
> c'est vrai qu'une fct équivalente à eval en php serait
> catastrophique
> mais ici ce n'est que du js inoffensif ...
Javascript n'est pas inoffensif. Sinon pourquoi tenterait-on de bloquer
le cross-site scripting ?
Le simple fait que vous ne voyez pas la différence entre la solution à
base de 'eval' et celles basées sur un switch ou une recherche dans un
tableau associatif montre que la solution à base de 'eval' est
dangereuse... puisque vous ne mesurez pas correctement les risques de
son utilisation.
[...]
> c'est vrai qu'une fct équivalente à eval en php serait
> catastrophique
> mais ici ce n'est que du js inoffensif ...
Javascript n'est pas inoffensif. Sinon pourquoi tenterait-on de bloquer
le cross-site scripting ?
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
si do-nom n'est pas une fonction il sera interprété comme une variable
et sa concaténation avec la parenthèse (params) va provoquer une erreur
qui fait que js abandonnera et passera à la ligne suivante
si nom est formé de caractères qui ne sont pas acceptés par l'interprète
pour les variables et les fonctions , il y aura aussi une erreur
et abandon
si nom et params sont issus d'une forme et renvoyés au serveur
il y a un problème
mais il se situe avant les 2 lignes h=.... et eval(h)
ou avant le switch d'ailleurs
et donc eval n'est pas en cause
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
une fonction do-resetall en javascript qui attaque une base de donnée
ce n'est pas eval qui est en cause mais cette fonction
et le script privé ne l'est pas assez
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
si do-nom n'est pas une fonction il sera interprété comme une variable
et sa concaténation avec la parenthèse (params) va provoquer une erreur
qui fait que js abandonnera et passera à la ligne suivante
si nom est formé de caractères qui ne sont pas acceptés par l'interprète
pour les variables et les fonctions , il y aura aussi une erreur
et abandon
si nom et params sont issus d'une forme et renvoyés au serveur
il y a un problème
mais il se situe avant les 2 lignes h=.... et eval(h)
ou avant le switch d'ailleurs
et donc eval n'est pas en cause
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
une fonction do-resetall en javascript qui attaque une base de donnée
ce n'est pas eval qui est en cause mais cette fonction
et le script privé ne l'est pas assez
>> > > h='do_' + nom + '(' + params+ ');';
> mais comment pourrait-elle être illicite ?
Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?
je ne vois toujours pas ,
la chaîne h écrite au-dessus ne dépend que de nom et params
si do_nom et une fct , javascript va "évaluer" les arguments
et leur appliquer la fonction
le problème peut donc être au niveau de l'interprétation de params
mais c'est le même avec la version switch ( nom) { ... }
si do-nom n'est pas une fonction il sera interprété comme une variable
et sa concaténation avec la parenthèse (params) va provoquer une erreur
qui fait que js abandonnera et passera à la ligne suivante
si nom est formé de caractères qui ne sont pas acceptés par l'interprète
pour les variables et les fonctions , il y aura aussi une erreur
et abandon
si nom et params sont issus d'une forme et renvoyés au serveur
il y a un problème
mais il se situe avant les 2 lignes h=.... et eval(h)
ou avant le switch d'ailleurs
et donc eval n'est pas en cause
> et si "nom" n'existe pas JS ne fera rien ,
Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?
une fonction do-resetall en javascript qui attaque une base de donnée
ce n'est pas eval qui est en cause mais cette fonction
et le script privé ne l'est pas assez
Si tu tiens absolument à 'eval', je n'ai rien contre, à partir du moment
où l'on s'est protégé des cas possiblement illicites. Par exemple :
switch(nom) {
case "search":
case "save":
case "edit":
case "view":
h='do_' + nom + '(' + params+ ');';
eval(h);
break;
default:
//
// traitement d'erreur
//
}
> si nom est formé de caractères qui ne sont pas acceptés par l'interprète
> pour les variables et les fonctions , il y aura aussi une erreur
> et abandon
Abandon ? Tu veux dire que le script s'arrêtera, ou qu'il continuera ?
S'il s'arrête, il peut y avoir des cas où il aurait mieux valu qu'il
continue, et inversement.
Ce n'est pas moi qui ai dit que eval était un problème en soi. Ce que
je dis, c'est que si le contrôle de validité de 'nom' est fait à un
endroit, et que la construction du nom de la fonction est fait à un
autre endroit, il y a toutes les chances pour qu'un jour (mettons lors
d'un changement mineur en février 2013) les deux ne soient plus tout
à fait en phase, ce qui ouvrira une faille de sécurité.
Encore une fois, je n'ai pas dit que 'eval' était en cause. Une
fonction dangereuse *peut* exister, elle peut même être parfaitement
justifiée. Ma version avec 'switch' et 'default' permet d'éviter
d'appeler une telle fonction par erreur ou par négligence, alors
qu'une version sans contrôle est beaucoup plus risquée.
Si tu tiens absolument à 'eval', je n'ai rien contre, à partir du moment
où l'on s'est protégé des cas possiblement illicites. Par exemple :
switch(nom) {
case "search":
case "save":
case "edit":
case "view":
h='do_' + nom + '(' + params+ ');';
eval(h);
break;
default:
//
// traitement d'erreur
//
}
> si nom est formé de caractères qui ne sont pas acceptés par l'interprète
> pour les variables et les fonctions , il y aura aussi une erreur
> et abandon
Abandon ? Tu veux dire que le script s'arrêtera, ou qu'il continuera ?
S'il s'arrête, il peut y avoir des cas où il aurait mieux valu qu'il
continue, et inversement.
Ce n'est pas moi qui ai dit que eval était un problème en soi. Ce que
je dis, c'est que si le contrôle de validité de 'nom' est fait à un
endroit, et que la construction du nom de la fonction est fait à un
autre endroit, il y a toutes les chances pour qu'un jour (mettons lors
d'un changement mineur en février 2013) les deux ne soient plus tout
à fait en phase, ce qui ouvrira une faille de sécurité.
Encore une fois, je n'ai pas dit que 'eval' était en cause. Une
fonction dangereuse *peut* exister, elle peut même être parfaitement
justifiée. Ma version avec 'switch' et 'default' permet d'éviter
d'appeler une telle fonction par erreur ou par négligence, alors
qu'une version sans contrôle est beaucoup plus risquée.
Si tu tiens absolument à 'eval', je n'ai rien contre, à partir du moment
où l'on s'est protégé des cas possiblement illicites. Par exemple :
switch(nom) {
case "search":
case "save":
case "edit":
case "view":
h='do_' + nom + '(' + params+ ');';
eval(h);
break;
default:
//
// traitement d'erreur
//
}
> si nom est formé de caractères qui ne sont pas acceptés par l'interprète
> pour les variables et les fonctions , il y aura aussi une erreur
> et abandon
Abandon ? Tu veux dire que le script s'arrêtera, ou qu'il continuera ?
S'il s'arrête, il peut y avoir des cas où il aurait mieux valu qu'il
continue, et inversement.
Ce n'est pas moi qui ai dit que eval était un problème en soi. Ce que
je dis, c'est que si le contrôle de validité de 'nom' est fait à un
endroit, et que la construction du nom de la fonction est fait à un
autre endroit, il y a toutes les chances pour qu'un jour (mettons lors
d'un changement mineur en février 2013) les deux ne soient plus tout
à fait en phase, ce qui ouvrira une faille de sécurité.
Encore une fois, je n'ai pas dit que 'eval' était en cause. Une
fonction dangereuse *peut* exister, elle peut même être parfaitement
justifiée. Ma version avec 'switch' et 'default' permet d'éviter
d'appeler une telle fonction par erreur ou par négligence, alors
qu'une version sans contrôle est beaucoup plus risquée.