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

时间:2010-07-20 07:03:08

标签: javascript security

我有一个网站,其中所有页面都通过index.php处理,其中包含不同的PHP文件,具体取决于请求的URL(这是通过mod_rewrite完成的)。

我正在使用以下方法在页面加载时执行特定功能:

的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>

includedPage.php

<?php
// Generate page
?>
<script type="text/javascript">
readyFns.push("someFunction");
readyFns.push("someOtherFunction");
</script>

我非常喜欢这种方法,因为我只需要在本页末尾设置readyFns,其他所有内容都将由index.php很好地控制。 我的问题是:这样安全吗?是否对生成链接的人很敏感,该链接任意设置readyFns以指向某些恶意代码然后链接到我的网站? 我该如何防止这种情况?

感谢 尼科

1 个答案:

答案 0 :(得分:1)

这很有趣。原则上,它可能没问题,但你有点担心。这只是编译一个键列表来查找对象上的函数并执行,所以在这方面它并不是真正的安全问题。但是,您实际上是提供对所有全局变量的访问。除了window之外,你最好还要创建一个全局对象来存储你的函数,如下所示:

var funcs = {};
funcs.someFunction = function() {/*blah*/};
funcs.someOther = function() {/*blah*/};

然后您的readyFuncs内容会循环funcs而不是window。我认为过去没有什么可担心的。

当然,您的方法还有其他一些可以改进的方法,但我认为如果它适合您,那就没关系。