Javascript JS中函数的动态评估(这安全吗?)
我有一个网站,所有页面都通过index.php进行处理,该网站根据请求的URL包含不同的php文件(这是通过mod_重写完成的) 我使用以下方法在页面加载时执行特定函数: index.phpJavascript JS中函数的动态评估(这安全吗?),javascript,security,Javascript,Security,我有一个网站,所有页面都通过index.php进行处理,该网站根据请求的URL包含不同的php文件(这是通过mod_重写完成的) 我使用以下方法在页面加载时执行特定函数: index.php <script type="text/javascript"> readyFns = Array(); </script> <?php // Do some stuff here, and pull the name of the PHP page to include fr
<script type="text/javascript">
readyFns = Array();
</script>
<?php
// Do some stuff here, and pull the name of the PHP page to include from the DB
include $pageToInclude
?>
<script type="text/javascript">
commonFunctionToApplyToAllThePages();
otherCommonFunction();
// page-specific functions
for (i=0; i<readyFns.length; i++)
{
if (typeof(window[readyFns[i]]) == "function")
window[readyFns[i]]();
}
</script>
<?php
// Generate page
?>
<script type="text/javascript">
readyFns.push("someFunction");
readyFns.push("someOtherFunction");
</script>
readyFns=Array();
通用功能适用于所有页面();
otherCommonFunction();
//页面特定功能
对于(i=0;i这很有趣。原则上,这可能没问题,但您有点担心是对的。这只是编译一个键列表,作为对象上的函数进行查找并执行,因此这在这方面并不是真正的安全问题。但是,您本质上提供了对所有全局的访问。您可能会更好在窗口之外创建一个全局对象来存储函数,如下所示:
var funcs = {};
funcs.someFunction = function() {/*blah*/};
funcs.someOther = function() {/*blah*/};
然后你的readyFuncs
东西会在funcs
上循环,而不是window
。我认为没有什么需要担心的
当然,您的方法还有其他方面可以改进,但我认为如果它对您有效,也没关系。谢谢您的回答,但这不会解决问题吗?我的意思是,可以在functs
中定义恶意函数,而不是主作用域,不是吗?或者我遗漏了什么?这在技术上是可能的,但是这没什么好担心的。我把它移出了窗口,这样你就不能访问内置的setTimeout
或alert
。