This repository was archived by the owner on Apr 12, 2024. It is now read-only.
fix($parse): disallow access to Function constructor. #3043
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.
Sandboxing Angular Expressions
Angular expressions are generally considered safe because these
expressions only have direct access to $scope and locals. However, one
can obtain the ability to execute arbitrary JS code by obtaining a
reference to native JS functions such as the Function constructor.
As an example, consider the following Angular expression:
{}.toString.constructor(alert("evil JS code"))
We want to prevent this type of access. For the sake of performance, we
disallow any access to any member named "constructor". You can foil
this by sticking in the Function constructor under a different name in
your scope or exposing other JS apis or the DOM by sticking it on the
scope. Don't do that - you increase the chances of accidently allowing
an exploit through.