【发布时间】:2015-05-13 16:41:55
【问题描述】:
我知道在用户输入上使用eval() 通常是不安全的,但是在这个特定的用例中,我想知道我是否可以避免负面的安全影响。我有一个iframe,它看起来像这样(注意这是一个template,所以它被另一个文件嵌入到页面上):
HTML:
<iframe>
<html ng-app="iframe">
<script type="text/javascript" src="/static/angular.js"></script>
<script type="text/javascript" src="/static/iframe.js"></script>
<body id="body" ng-controller="iFrameCtrl">
<script id="myscript" type="text/javascript">
var color = 'orange';
console.log(color);
stage.update();
</script>
</html>
</iframe>
还有iframe.js:
angular.module('iframe', [])
.controller('iFrameCtrl', ($scope){
//external user input that modifies 'color' variable in #myscript
//$scope.$watching brings external variable changes into this function
var scriptElem = angular.element(document.querySelector('#myscript'));
scriptText = scriptElem[0].innerText;
$scope.$apply();
eval(scriptText);
});
基本要点是有一个用户输入(来自 iframe 外部,它正在修改颜色变量,将 var color = 'orange' 更改为 var color = 'blue',或类似的东西 - 其中 eval() 导致脚本重新执行并应用新的color)。
这可以安全地完成吗?在XSS攻击等方面。
我最初的印象是肯定的——所有脚本都在 iFrame 中执行。此外,Angular 能够使用指令仅接受与编程建立的规则一致的输入字段中的字符串。 (即,如果输入字段遵循既定格式,我可以让输入字段仅评估为 true)。
感谢任何帮助。谢谢!
【问题讨论】:
标签: javascript angularjs iframe angularjs-scope