10
votes

Qu'est-ce que Boxing Sandboxing dans JavaScript?

Je comprends le terme Sandbox. Mais mes compétences limitées dans JS ne sont pas incapables de m'aider à comprendre ce qui est le bac à sable dans JS. Alors, qu'est-ce qui est en réalité sandboxing? En dehors de la sécurité, pourquoi avons-nous besoin de Sandbox JS?


3 commentaires

Pourquoi y aurait-il une raison en dehors de la sécurité? Le point entier est de ne pas autoriser le code arbitraire de la bande à affecter quoi que ce soit en dehors du navigateur.


@WOOBLE Voir les réponses ci-dessous: Il existe des avantages supplémentaires en plus de la sécurité. Je pourrais ajouter, c'est simplement un bon design depuis que JavaScript est tellement mauvais des choses globales.


@ Šime vidas, oui, seuls les navigateurs pour l'instant


3 Réponses :


3
votes

Le sable de sable JavaScript fait exactement ce que vous avez dit. Il limite la portée de ce qu'un script peut faire. Il existe également des avantages en termes de virtualisation des ressources que le script peut appeler. Cela permet à l'hôte de la boite de sable de prélever ces ressources pour de meilleures performances et de dire, arrêtez un script sans fin en boucle apportant l'ensemble du navigateur qui s'écrase.


0 commentaires

3
votes

Sandboxing est l'acte de créer une étendue dans laquelle aucune autre partie de l'application ne peut fonctionner (à moins que la possibilité de donner l'occasion de). Plus précisément, il s'agit généralement d'une étendue de fonction qui expose un sous-ensemble limité de ce qui se passe réellement en elle.

Une bibliothèque fondée sur l'idée de sandbox est YUI3. L'unité de base de l'application est une boîte de sable d'instance YUI: p>

var Y = YUI(); // creates a configurable YUI instance

// Creates a sandbox for one part of your application,
// including the 'node' module.
Y.use('node', function(Z) {
    // Z is a YUI instance that's specific to this sandbox.
    // Operations inside it are protected from outside code
    // unless exposed explicitly. Any modules you request in
    // use statement will be separately instanced just for
    // this sandbox (in this case, the 'node' module)
    //
    // That way, if another part of your application decides
    // to delete Z.Node (or worse, replace it with a
    // malicious proxy of Z.Node) the code you've written
    // here won't be affected.
});


2 commentaires

Mon large bande n'a pas aimé la question et donc a été bloquée :(, Merci d'une information détaillée, en regardant votre exemple dans jQuery, je peux faire ce $ (fonction () {/ * du code ici * /}); / code> Est-ce que vous dites?


Pas tout à fait, mais proche. La grande différence est que si j'ai une instance yui où j'utilise les modules A et b et le module b se produit pour modifier le module A (ajoute des propriétés supplémentaires ou modifie son comportement), je peux créer ultérieurement une nouvelle instance YUI qui utilise simplement le module A pour obtenir la version non modifiée. Ceci est pratiquement impossible à faire à JQuery (autant que je sache, de toute façon).



0
votes

Sandboxing crée une portée limitée pour le script à utiliser. En supposant que vous codez pour un site Web, T 'vaut la peine de sandboxer pour éviter de faire des modifications à un site en direct lorsque vous n'êtes pas sûr de savoir s'il fonctionnera exactement comme vous vous attendez - et il est impossible d'être vraiment certain sans test. Même si cela fonctionne correctement, s'il y a une chance de faire une série de modifications apportées à la JS jusqu'à ce que vous ayez modifié comme vous le souhaitez, vous pouvez facilement perturber quiconque tenter d'utiliser le site pendant que vous le méritez. < / p>

Il est également beaucoup plus facile de dire ce qui est cassé lorsque vous cassez des choses, en raison de la nature limitée du bac à sable.


0 commentaires