An Icebox is better than a bad sandbox #14
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Since it is difficult to sandbox JS, this is a different approach. It is possible and easy to get access to the prototypes of the outside world's primitive objects, but that alone is not dangerous. It becomes dangerous when the host's prototypes are modified. So lets create an icebox by freezing the host's objects and prototypes.
Unfortunately,
Object.freeze
blocks child objects from overriding properties, so this is a customized version ofObject.freeze
that allows children to overwrite properties. The effects on the frozen object are identical.The security violation checking code has been removed since it was checking property descriptors, and it is now impossible to violate.
While this doesn't guarantee that user code can't escape, it does dramatically reduce the amount of code that can be exploited.