Javascript JS中函数的动态评估(这安全吗?)

Javascript 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

我有一个网站,所有页面都通过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 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