Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Julien Palard
Bonjour, Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité. Le gros cas d'utilisation légitime qui me vient en tête c'est pour "interpréter" de la configuration. Par exemple, si tu as un fichier de conf, (toml, ini, yaml, peu m'importe), et que tu veux que ton utilisateur puisse entrer une durée en seconde, tu peux lui permettre d'écrire : timeout: 60 * 60 * 24 au lieu de `timeout: 86400`, qui est plus lisible. Dans ton code ça se traduira par un : timeout = eval(config["timeout"]) Dans la même série la configuration pourrait permettre de nommer une classe Í utiliser pour faire une certaine chose, et utiliser `eval(class_name)` pour instancier la classe, logging le fait par exemple [1]: handlers: console: class: logging.StreamHandler Ou une condition : run_at: hour < 10 qui se traduira dans le code par un : eval(config["run_at"], {}, {"hour": datetime.datetime.now().hour}) On trouve d'autres utilisations légitimes de eval pour exécuter du code dans un autre contexte (dans un IDE ou un débogeur par exemple) en utilisant le 2ème et 3ème paramètre. Ça reste des cas très spécifiques, mais suffisants pour ne pas supprimer eval. Et je ne peux que conclure par : attention, c'est un aimant Í failles de sécurité. [1]: https://docs.python.org/3/howto/logging.html#configuring-logging -- [Julien Palard](https://mdk.fr)
Bonjour,
Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un
print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille
de sécurité.
Le gros cas d'utilisation légitime qui me vient en tête c'est pour
"interpréter" de la configuration.
Par exemple, si tu as un fichier de conf, (toml, ini, yaml, peu
m'importe), et que tu veux que ton utilisateur puisse entrer une durée
en seconde, tu peux lui permettre d'écrire :
timeout: 60 * 60 * 24
au lieu de `timeout: 86400`, qui est plus lisible. Dans ton code ça se
traduira par un :
timeout = eval(config["timeout"])
Dans la même série la configuration pourrait permettre de nommer une
classe Í utiliser pour faire une certaine chose, et utiliser
`eval(class_name)` pour instancier la classe, logging le fait par
exemple [1]:
On trouve d'autres utilisations légitimes de eval pour exécuter du code
dans un autre contexte (dans un IDE ou un débogeur par exemple) en
utilisant le 2ème et 3ème paramètre.
Ça reste des cas très spécifiques, mais suffisants pour ne pas supprimer
eval. Et je ne peux que conclure par : attention, c'est un aimant Í
failles de sécurité.
Bonjour, Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité. Le gros cas d'utilisation légitime qui me vient en tête c'est pour "interpréter" de la configuration. Par exemple, si tu as un fichier de conf, (toml, ini, yaml, peu m'importe), et que tu veux que ton utilisateur puisse entrer une durée en seconde, tu peux lui permettre d'écrire : timeout: 60 * 60 * 24 au lieu de `timeout: 86400`, qui est plus lisible. Dans ton code ça se traduira par un : timeout = eval(config["timeout"]) Dans la même série la configuration pourrait permettre de nommer une classe Í utiliser pour faire une certaine chose, et utiliser `eval(class_name)` pour instancier la classe, logging le fait par exemple [1]: handlers: console: class: logging.StreamHandler Ou une condition : run_at: hour < 10 qui se traduira dans le code par un : eval(config["run_at"], {}, {"hour": datetime.datetime.now().hour}) On trouve d'autres utilisations légitimes de eval pour exécuter du code dans un autre contexte (dans un IDE ou un débogeur par exemple) en utilisant le 2ème et 3ème paramètre. Ça reste des cas très spécifiques, mais suffisants pour ne pas supprimer eval. Et je ne peux que conclure par : attention, c'est un aimant Í failles de sécurité. [1]: https://docs.python.org/3/howto/logging.html#configuring-logging -- [Julien Palard](https://mdk.fr)
Dominique
Le 04/12/2020 Í 00:31, Julien Palard a écrit :
Bonjour, Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant Í faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN. C'est te dire :-) -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Le 04/12/2020 Í 00:31, Julien Palard a écrit :
Bonjour,
Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un
print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille
de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant Í
faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se
connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN. C'est
te dire :-)
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Bonjour, Le 2020-11-28 Í 18:54, Dominique a écrit :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant Í faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN. C'est te dire :-) -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Benoit Izac
Bonjour, Le 04/12/2020 Í 05:38, Dominique a écrit dans le message <rqcefn$1078$Â :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant Í faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN. C'est te dire :-)
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin. -- Benoit Izac
Bonjour,
Le 04/12/2020 Í 05:38, Dominique a écrit dans le message
<rqcefn$1078$1@gioia.aioe.org>Â :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport
Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant
Í faille de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant
Í faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se
connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN.
C'est te dire :-)
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de
mémoire, il y a une présentation du module asyncio Í la fin.
Bonjour, Le 04/12/2020 Í 05:38, Dominique a écrit dans le message <rqcefn$1078$Â :
Tout est dans le sujet : Í quoi sert la fonction eval par rapport Í un print normal ou une bête égalité.
Les cas d'utilisation légitime sont rares, eval reste un aimant Í faille de sécurité.
Je te remercie pour cette réponse très précise. Je note l'aimant Í faille. Soyons francs, je suis Í 1000 lieues d'écrire un soft qui se connecterait au réseau. J'en suis au dernier tiers du MOOC de FUN. C'est te dire :-)
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin. -- Benoit Izac
Dominique
Le 04/12/2020 Í 07:38, Benoit Izac a écrit :
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un « aimant Í failles » ? Je ne vois pas. -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Le 04/12/2020 Í 07:38, Benoit Izac a écrit :
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de
mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un «
aimant Í failles » ? Je ne vois pas.
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un « aimant Í failles » ? Je ne vois pas. -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Benoit Izac
Bonjour, Le 05/12/2020 Í 05:33, Dominique a écrit dans le message <rqf2im$2fe$Â :
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un « aimant Í failles » ? Je ne vois pas.
Tu passes du coq Í l'Í¢ne. eval() permet d'exécuter n'importe quel code externe au script donc sur lequel tu n'as aucun contrÍ´le. [WARNING: NE PAS ESSAYER !] saisie = input('Entrez une opération : ') print('Le résultat est :', eval(saisie)) Que se passe-il si l'utilisateur saisie la chaÍ®ne ci-dessous ? exec('import shutil'), shutil.rmtree('/', ignore_errors=True) Ça va sortir un truc comme : Le résultat est : CATASTROPHIQUE :-( -- Benoit Izac
Bonjour,
Le 05/12/2020 Í 05:33, Dominique a écrit dans le message
<rqf2im$2fe$2@gioia.aioe.org>Â :
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de
mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un
« aimant Í failles » ? Je ne vois pas.
Tu passes du coq Í l'Í¢ne.
eval() permet d'exécuter n'importe quel code externe au script donc sur
lequel tu n'as aucun contrÍ´le.
[WARNING: NE PAS ESSAYER !]
saisie = input('Entrez une opération : ')
print('Le résultat est :', eval(saisie))
Que se passe-il si l'utilisateur saisie la chaͮne ci-dessous ?
Bonjour, Le 05/12/2020 Í 05:33, Dominique a écrit dans le message <rqf2im$2fe$Â :
Donc tu es plutÍ´t Í deux doigts de te connecter au réseau car, de mémoire, il y a une présentation du module asyncio Í la fin.
Peut-être, je n'ai rien vu Í ce sujet. Mais alors, en quoi eval est un « aimant Í failles » ? Je ne vois pas.
Tu passes du coq Í l'Í¢ne. eval() permet d'exécuter n'importe quel code externe au script donc sur lequel tu n'as aucun contrÍ´le. [WARNING: NE PAS ESSAYER !] saisie = input('Entrez une opération : ') print('Le résultat est :', eval(saisie)) Que se passe-il si l'utilisateur saisie la chaÍ®ne ci-dessous ? exec('import shutil'), shutil.rmtree('/', ignore_errors=True) Ça va sortir un truc comme : Le résultat est : CATASTROPHIQUE :-( -- Benoit Izac
Dominique
Le 05/12/2020 Í 08:59, Benoit Izac a écrit :
eval() permet d'exécuter n'importe quel code externe au script donc sur lequel tu n'as aucun contrÍ´le. [WARNING: NE PAS ESSAYER !] saisie = input('Entrez une opération : ') print('Le résultat est :', eval(saisie)) Que se passe-il si l'utilisateur saisie la chaÍ®ne ci-dessous ? exec('import shutil'), shutil.rmtree('/', ignore_errors=True) Ça va sortir un truc comme : Le résultat est : CATASTROPHIQUE :-(
Ah d'accord, je comprends mieux. Je ne savais pas que eval pouvait « avaler » un peu n'importe quoi. Ce n'est pas grave si je ne teste pas ton exemple ? :-) Merci, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Le 05/12/2020 Í 08:59, Benoit Izac a écrit :
eval() permet d'exécuter n'importe quel code externe au script donc sur
lequel tu n'as aucun contrÍ´le.
[WARNING: NE PAS ESSAYER !]
saisie = input('Entrez une opération : ')
print('Le résultat est :', eval(saisie))
Que se passe-il si l'utilisateur saisie la chaͮne ci-dessous ?
eval() permet d'exécuter n'importe quel code externe au script donc sur lequel tu n'as aucun contrÍ´le. [WARNING: NE PAS ESSAYER !] saisie = input('Entrez une opération : ') print('Le résultat est :', eval(saisie)) Que se passe-il si l'utilisateur saisie la chaÍ®ne ci-dessous ? exec('import shutil'), shutil.rmtree('/', ignore_errors=True) Ça va sortir un truc comme : Le résultat est : CATASTROPHIQUE :-(
Ah d'accord, je comprends mieux. Je ne savais pas que eval pouvait « avaler » un peu n'importe quoi. Ce n'est pas grave si je ne teste pas ton exemple ? :-) Merci, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es