Je veux savoir comment la fonction suivante définit l'élément 'this' et extrait la cellule du tableau? S'il vous plaît.Problème de sécurité JavaScript
//my secure code
var priv = ['item-0','item-1'];
var api = {push: function(x){priv.push(x)}}
api.store = function(i,x){priv[i] = x}
//the attaker script
var result;
api.store('push',function(){result = this[0]});
api.push();
//the result is cell 0 of private array
//how?
//if i change the 'push' parameter then the result is empty!
document.write(result)
Le mot-clé 'this' peut avoir différentes significations selon le contexte. Vous n'avez déclaré nulle part la variable 'result', donc par défaut il a la portée globale, c'est pourquoi il devient disponible en dehors de la fonction. Pourriez-vous fournir plus de détails sur votre problème? – CROSP
@CROSP J'ai un contenu critique, et je veux les garder en sécurité. un de mes amis m'envoie ce code et je réalise qu'il peut accéder à des variables privées, en utilisant mes objets API. – easa
@easa Si un attaquant peut exécuter du code arbitraire dans le même environnement, vous avez généralement déjà perdu. Qu'est-ce que vous essayez de protéger exactement? – Bergi