在 Angular 中通过 $scope 安全地使用 eval()
Using eval() safely with $scope in Angular
这里安全吗?或者这会容易受到代码注入的攻击吗?
$scope.placeholder = function(value, def) {
var val = eval("$rootScope.master.user." + value);
if (val) {
return val;
} else {
return def;
}
};
我使用的是括号表示法,但我意识到如果我在下面的示例中传入一个对象,例如 Address.addr1,我就不能这样做:
<input type="email" ng-model="user.email" placeholder="{{placeholder('email', 'Email...')}}" /><br/>
<input type="text" ng-model="user.Address.addr1" placeholder="{{placeholder('Address.addr1', 'Addr. Line 1...')}}" />
我认为这可能会回答我的问题,但我不确定:
Is using javascript eval() safe for simple calculations in inputs?
您可以简单地使用 Bracket notation。
var val = $rootScope.master.user[value];
您肯定不需要评估。你应该阅读 Why is using the JavaScript eval function a bad idea?
你有什么理由不能这样做吗?正如 Claies 所说,您的问题确实有 XY 问题的味道:
<input type="email" ng-model="user.email"
placeholder="{{ user.email || 'Email...'}}" /><br/>
<input type="text" ng-model="user.Address.addr1"
placeholder="{{ user.Address.addr1 || 'Addr. Line 1...'}}" />
或者更好的是,问题仍然是您为什么要尝试这样做。占位符只有在字段为空时才有用,所以只需提供一个静态值:
<input type="email" ng-model="user.email" placeholder="Email..." /><br/>
<input type="text" ng-model="user.Address.addr1" placeholder="Addr. Line 1..." />
这里安全吗?或者这会容易受到代码注入的攻击吗?
$scope.placeholder = function(value, def) {
var val = eval("$rootScope.master.user." + value);
if (val) {
return val;
} else {
return def;
}
};
我使用的是括号表示法,但我意识到如果我在下面的示例中传入一个对象,例如 Address.addr1,我就不能这样做:
<input type="email" ng-model="user.email" placeholder="{{placeholder('email', 'Email...')}}" /><br/>
<input type="text" ng-model="user.Address.addr1" placeholder="{{placeholder('Address.addr1', 'Addr. Line 1...')}}" />
我认为这可能会回答我的问题,但我不确定: Is using javascript eval() safe for simple calculations in inputs?
您可以简单地使用 Bracket notation。
var val = $rootScope.master.user[value];
您肯定不需要评估。你应该阅读 Why is using the JavaScript eval function a bad idea?
你有什么理由不能这样做吗?正如 Claies 所说,您的问题确实有 XY 问题的味道:
<input type="email" ng-model="user.email"
placeholder="{{ user.email || 'Email...'}}" /><br/>
<input type="text" ng-model="user.Address.addr1"
placeholder="{{ user.Address.addr1 || 'Addr. Line 1...'}}" />
或者更好的是,问题仍然是您为什么要尝试这样做。占位符只有在字段为空时才有用,所以只需提供一个静态值:
<input type="email" ng-model="user.email" placeholder="Email..." /><br/>
<input type="text" ng-model="user.Address.addr1" placeholder="Addr. Line 1..." />