我有一个网站,其中所有页面都通过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
以指向某些恶意代码然后链接到我的网站?
我该如何防止这种情况?
感谢 尼科
答案 0 :(得分:1)
这很有趣。原则上,它可能没问题,但你有点担心。这只是编译一个键列表来查找对象上的函数并执行,所以在这方面它并不是真正的安全问题。但是,您实际上是提供对所有全局变量的访问。除了window
之外,你最好还要创建一个全局对象来存储你的函数,如下所示:
var funcs = {};
funcs.someFunction = function() {/*blah*/};
funcs.someOther = function() {/*blah*/};
然后您的readyFuncs
内容会循环funcs
而不是window
。我认为过去没有什么可担心的。
当然,您的方法还有其他一些可以改进的方法,但我认为如果它适合您,那就没关系。