La stratégie de sécurité de contenu désactive l'utilisation de la fonction Eval JavaScript ainsi que scripts en ligne. Ils prétendent que toutes les instances d'EVAL peuvent être remplacées par une autre fonction (espérons-la plus sûre). Je suis d'accord dans la plupart des scénarios, JavaScript Eval peut être remplacé, mais je ne sais pas si le remplacement est possible pour chaque cas. p>
Ma question est double: p>
3 Réponses :
Vous pouvez envelopper le script Java dans un appel de fonction similaire à JSONP, puis créer de manière dynamique une balise de script à charger cela. P>
désolé pouvez-vous expliquer cela un peu plus? Si je veux exécuter: eval (document.cookie = "quelques entrées d'utilisateur"); Comment remplacez-vous cela par un appel de fonction JavaScript sans utiliser Eval?
Donc, si le code que vous essayiez d'être exécuté était var test = "bonjour monde"; code> vous pouvez convertir cela en
fonction () {var test = "bonjour world"} code "} code" > alors vous généreriez de manière dynamique une étiquette de script à charger ce code qui évaluerait
J'ai pensé cela aussi, mais cela fonctionne-t-il pour chaque cas?
Les utilisations les plus courantes qui peuvent être substituées sont les suivantes. Je voudrais certainement utiliser ces premiers.
Accéder aux propriétés dynamiques p>
Utilisez: n'utilise pas analyse JSON p>
Utilisez n'utilise pas Calcul de l'utilisateur utilisateur p>
Utilisez un certain bibliothèque p>
n'utilise pas Si vraiment nécessaire, vous pouvez également envoyer le script à un serveur qui le fait simplement l'écho, et vous pouvez le demander comme une étiquette de script. Il n'utilisera pas Vous pouvez dire que cela répond également automatiquement à votre deuxième question avec "Non '. P> p> obj [keasvariable] code> p>
eval ('obj.' + keysvariable) code> p> li>
json.parse (données) code> p>
eval ('("+ données +') ') code> p> li>
eval (entrée) code> p> li>
ol>
eval code> mais l'exécuter toujours. Ce n'est pas en sécurité car il est envoyé deux fois sur Internet. P>
request_script code> pourrait être un fichier implémenté dans PHP, comme ce qui suit. Encore une fois, c'est une mauvaise pratique mais est une façon générique de contourner
eval code>. P>
Merci, la méthode du script de demande est ce que je recherche.
@PIMVDB Pas besoin de le rebondir sur un serveur. Vérifiez ma réponse ajoutée pour un altentif à cette suggestion ...
au lieu d'utiliser eval code> Vous pouvez également utiliser un blob code> et charger le code comme s'il s'agissait d'un
js externe code> fichier:
Pour vous assurer que les fonctions ou variables qui se trouvent à l'intérieur du code que vous chargez sont disponibles, vous devez utiliser une méthode
Callback CODE> qui sera déclenchée
Overload code> événement. P> < Pré> xxx pré>
Ce n'est pas dupliquer
Super! Ce qui doit être modifié si code code> doit recevoir un argument et il a une valeur de retour?
Veuillez poster un exemple, où vous n'êtes pas sûr de le remplacer. Sinon, c'est un peu difficile de vous aider.
Eh bien, le problème est que je ne peux pas trouver un exemple où je ne peux pas remplacer. Cependant, je ne peux pas non plus trouver une manière générique de remplacer EVAL (c'est différent pour chaque cas).
@Tony: Avez-vous un cas d'utilisation du monde réel ou êtes-vous simplement intéressé de voir si une transformation universelle de
eval code> à une autre construction de langue existe?
Mozilla permet
eval code> fonctionner. À partir de août 2018.