PHP在个别环境中执行一些代码

时间:2015-02-03 06:11:06

标签: php

要解释我的目标有点困难......这是一个简单的脚本:

<?PHP

$someData = ["foo" => "bar"];

function someFunction($someArg) {
     include("someFile.php");
}

?>

这里是&#34; someFile.php&#34;的代码:

<?PHP
   echo "I'm some file!";
   global $someData; // point 1
   var_dump($someData);
   include("someOtherFile.php"); // point 2
?>

我想是否可以不让#34; someFile.php&#34;访问除了提供给它的任何变量,作为&#34; someFunction&#34;,(点1)的args并且不让它包含任何其他文件(第2点)?而这一切都发生在&#34; someFunction()&#34; ...我怎样才能实现这个目标和/或绕过这个?

4 个答案:

答案 0 :(得分:0)

不,您无法阻止从包含文件中读取其他变量。

要阻止阅读您的应用程序的任何状态,您可以将include替换为exec。例如:exec(&#39; php someFile.php参数&#39;)并使用$argv variable或getOpt

检索someFile.php中的参数

答案 1 :(得分:0)

不幸的是,没有任何方法(我知道)限制对当前实例的访问。它有点超出了PHP的目的和设计。我在下面提供了一个建议,但我建议你也在最后阅读我的评论。

我建议您单独执行PHP文件并使用自定义php.ini文件通过include属性禁用disable_function之类的函数。您可以创建一个临时的php文件,其中包含您需要在顶部访问的全局数据,如:

<?php
$someData = ["foo" => "bar"];


   echo "I'm some file!";
   global $someData; // point 1
   var_dump($someData);
   include("someOtherFile.php"); // point 2
?>

然后你会这样称呼它:     exec(&#34; php -f /temporary_folder/tempfile.php --php-ini /temporary_folder/php.ini");

我建议,如果安全性至关重要,并且您打算让它面向公众(自己托管或发布它),并由安全专业人员审核或审核。锁定PHP代码的执行并不是一件容易的事,并且有很多方法可以执行任意代码或执行您不想要的事情。你可以锁定eval,但是你知道你也可以通过preg_replace函数评估代码吗?你不会认为可以利用正则表达式函数。

答案 2 :(得分:0)

看起来你想要的是&#34;沙盒&#34;包含的脚本。我不知道答案,但您可以查看类似的已回答问题,例如this

PS:这应该是评论但对不起,我还没有评论特权。

答案 3 :(得分:0)

使用include无法实现此目的。

您必须考虑自CTRL + CCTRL + V起包含的内容。因此,只要您的原始代码可以访问全局变量,您的包含文件也具有。它就像将新页面粘贴到用过的笔记本中一样。这只是一种审美操作。解? OOP ...


您应该尝试不使用全局变量,并切换到面向对象的编程。如果没有全局变量,并且所有内容都存储在对象中,则该对象决定是否有人可以访问此变量。一个简短的例子:

<?php
    // "Closed environment"
    class NoAccess () {
        private $notaccessible;
        public __construct ($notaccessibleparam) {
            $this->notaccessible = $notaccessibleparam;
        }
        public method yourfunction() {
            print_r($this->notaccessible); // have access
        }
    }

    $instance = new NoAccess(10);
    // Further Code dont even know there is a variable called $notaccessible.
    // ...
    // ...
    // But, You can always call:
    $instance->yourfunction(); // which have access, and know it.
?>

在这种情况下,你包括(在三个点注释中)或写在那里的eveyrhing,不能使用$ notaccessible变量。使用它的唯一方法是使用您自己的界面,例如yourfunction()。

这可能对你来说真的很新,但你应该尝试在php中阅读oop(面向对象编程),而我看到你的代码非常复杂,你应该尽可能快地切换到oop。


<强>链接:

http://php.net/manual/en/language.oop5.php - 在php.net上的oop

http://php.net/manual/en/language.oop5.visibility.php - 变量的可见性在php.net上的类内部


PS。尝试在<?php中使用小写字母。这是一个好习惯。