aboutsummaryrefslogtreecommitdiffstats
path: root/test/ng/parseSpec.js
diff options
context:
space:
mode:
authorChirayu Krishnappa2013-08-09 14:47:13 -0700
committerChirayu Krishnappa2013-09-17 18:15:49 -0700
commitbe0b4856699334ff51bacf2d1fd3394663d6bd28 (patch)
tree19dc768b7d6b5f79c612a5d71f598f7e5cfab39e /test/ng/parseSpec.js
parent4b71bbc9886f6cf8e939d257c755bf7c4a94396e (diff)
downloadangular.js-be0b4856699334ff51bacf2d1fd3394663d6bd28.tar.bz2
fix($parse): disallow access to window and dom in expressions
Diffstat (limited to 'test/ng/parseSpec.js')
-rw-r--r--test/ng/parseSpec.js215
1 files changed, 130 insertions, 85 deletions
diff --git a/test/ng/parseSpec.js b/test/ng/parseSpec.js
index a82f736f..44b648c5 100644
--- a/test/ng/parseSpec.js
+++ b/test/ng/parseSpec.js
@@ -555,100 +555,145 @@ describe('parser', function() {
});
describe('sandboxing', function() {
- it('should NOT allow access to Function constructor in getter', function() {
- expect(function() {
- scope.$eval('{}.toString.constructor');
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: {}.toString.constructor');
-
- expect(function() {
- scope.$eval('{}.toString.constructor("alert(1)")');
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: {}.toString.constructor("alert(1)")');
-
- expect(function() {
- scope.$eval('[].toString.constructor.foo');
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: [].toString.constructor.foo');
-
- expect(function() {
- scope.$eval('{}.toString["constructor"]');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: {}.toString["constructor"]');
- expect(function() {
- scope.$eval('{}["toString"]["constructor"]');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: {}["toString"]["constructor"]');
-
- scope.a = [];
- expect(function() {
- scope.$eval('a.toString.constructor', scope);
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: a.toString.constructor');
- expect(function() {
- scope.$eval('a.toString["constructor"]', scope);
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: a.toString["constructor"]');
- });
-
- it('should NOT allow access to Function constructor in setter', function() {
- expect(function() {
- scope.$eval('{}.toString.constructor = 1');
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: {}.toString.constructor = 1');
+ describe('Function constructor', function() {
+ it('should NOT allow access to Function constructor in getter', function() {
+ expect(function() {
+ scope.$eval('{}.toString.constructor');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString.constructor');
+
+ expect(function() {
+ scope.$eval('{}.toString.constructor("alert(1)")');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString.constructor("alert(1)")');
+
+ expect(function() {
+ scope.$eval('[].toString.constructor.foo');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: [].toString.constructor.foo');
+
+ expect(function() {
+ scope.$eval('{}.toString["constructor"]');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString["constructor"]');
+ expect(function() {
+ scope.$eval('{}["toString"]["constructor"]');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: {}["toString"]["constructor"]');
+
+ scope.a = [];
+ expect(function() {
+ scope.$eval('a.toString.constructor', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: a.toString.constructor');
+ expect(function() {
+ scope.$eval('a.toString["constructor"]', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: a.toString["constructor"]');
+ });
- expect(function() {
- scope.$eval('{}.toString.constructor.a = 1');
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: {}.toString.constructor.a = 1');
+ it('should NOT allow access to Function constructor in setter', function() {
+ expect(function() {
+ scope.$eval('{}.toString.constructor = 1');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString.constructor = 1');
+
+ expect(function() {
+ scope.$eval('{}.toString.constructor.a = 1');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString.constructor.a = 1');
+
+ expect(function() {
+ scope.$eval('{}.toString["constructor"]["constructor"] = 1');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString["constructor"]["constructor"] = 1');
+
+
+ scope.key1 = "const";
+ scope.key2 = "ructor";
+ expect(function() {
+ scope.$eval('{}.toString[key1 + key2].foo = 1');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString[key1 + key2].foo = 1');
+
+ expect(function() {
+ scope.$eval('{}.toString["constructor"]["a"] = 1');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString["constructor"]["a"] = 1');
+
+ scope.a = [];
+ expect(function() {
+ scope.$eval('a.toString.constructor = 1', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: a.toString.constructor = 1');
+ });
- expect(function() {
- scope.$eval('{}.toString["constructor"]["constructor"] = 1');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: {}.toString["constructor"]["constructor"] = 1');
+ it('should NOT allow access to Function constructor that has been aliased', function() {
+ scope.foo = { "bar": Function };
+ expect(function() {
+ scope.$eval('foo["bar"]');
+ }).toThrowMinErr(
+ '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
+ 'Expression: foo["bar"]');
- scope.key1 = "const";
- scope.key2 = "ructor";
- expect(function() {
- scope.$eval('{}.toString[key1 + key2].foo = 1');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: {}.toString[key1 + key2].foo = 1');
+ });
- expect(function() {
- scope.$eval('{}.toString["constructor"]["a"] = 1');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: {}.toString["constructor"]["a"] = 1');
- scope.a = [];
- expect(function() {
- scope.$eval('a.toString.constructor = 1', scope);
- }).toThrowMinErr(
- '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
- 'Expression: a.toString.constructor = 1');
+ it('should NOT allow access to Function constructor in getter', function() {
+ expect(function() {
+ scope.$eval('{}.toString.constructor');
+ }).toThrowMinErr(
+ '$parse', 'isecfld', 'Referencing "constructor" field in Angular expressions is disallowed! ' +
+ 'Expression: {}.toString.constructor');
+ });
});
- it('should NOT allow access to Function constructor that has been aliased', function() {
- scope.foo = { "bar": Function };
- expect(function() {
- scope.$eval('foo["bar"]');
- }).toThrowMinErr(
- '$parse', 'isecfn', 'Referencing Function in Angular expressions is disallowed! ' +
- 'Expression: foo["bar"]');
-
+ describe('Window and $element/node', function() {
+ it('should NOT allow access to the Window or DOM when indexing', inject(function($window, $document) {
+ scope.wrap = {w: $window, d: $document};
+
+ expect(function() {
+ scope.$eval('wrap["w"]', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecwindow', 'Referencing the Window in Angular expressions is ' +
+ 'disallowed! Expression: wrap["w"]');
+ expect(function() {
+ scope.$eval('wrap["d"]', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecdom', 'Referencing DOM nodes in Angular expressions is ' +
+ 'disallowed! Expression: wrap["d"]');
+ }));
+
+ it('should NOT allow access to the Window or DOM returned from a function', inject(function($window, $document) {
+ scope.getWin = valueFn($window);
+ scope.getDoc = valueFn($document);
+
+ expect(function() {
+ scope.$eval('getWin()', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecwindow', 'Referencing the Window in Angular expressions is ' +
+ 'disallowed! Expression: getWin()');
+ expect(function() {
+ scope.$eval('getDoc()', scope);
+ }).toThrowMinErr(
+ '$parse', 'isecdom', 'Referencing DOM nodes in Angular expressions is ' +
+ 'disallowed! Expression: getDoc()');
+ }));
});
});