forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathisecprv.ngdoc
50 lines (39 loc) · 2.02 KB
/
isecprv.ngdoc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@ngdoc error
@name $parse:isecprv
@fullName Referencing private Field in Expression
@description
Occurs when an Angular expression attempts to access a private field.
Fields with names that begin or end with an underscore are considered
private fields. Angular expressions are not allowed to reference such
fields on the scope chain. This only applies to Angular expressions
(e.g. {{ }} interpolation and calls to `$parse` with a string expression
argument) – Javascript itself has no such notion.
To resolve this error, use an alternate non-private field if available
or make the field public (by removing any leading and trailing
underscore characters from its name.)
Example expression that would result in this error:
```html
<div>{{user._private_field}}</div>
```
Background:
Though Angular expressions are written and controlled by the developer
and are trusted, they do represent an attack surface due to the
following two factors:
- they typically deal with user input which is generally high risk
- they often don't get the kind of attention and test coverage that
JavaScript code would.
If these expression were evaluated in a context with full trust, an
attacker, though unable to change the expression itself, can feed it
unexpected and dangerous input that could result in a security
breach/exploit.
As such, Angular expressions are evaluated in a limited context. They
do not have direct access to the global scope, Window, Document, the
Function constructor or "private" properties (names beginning or ending
with an underscore character) on the scope chain. They should get their
work done via public properties and methods exposed on the scope chain
(keep in mind that this includes controllers as well as they are
published on the scope via the "controller as" syntax.)
As a best practise, only "publish" properties on the scopes and
controllers that must be available to Angular expressions. All other
members should either be in closures or be "private" by giving them
names with a leading or trailing underscore character.