阻止PHP脚本访问文件系统

时间:2018-10-05 14:24:11

标签: php

仅当脚本不包含任何可以访问其他脚本的功能时,我才想运行我的自定义php脚本。

这是我的解决方案:

function validateScript($data)
{
    $match = null;
    if(preg_match('/error_reporting|require|include|file_get_contents|glob|file|fgets|fread|dearfile|ini_set|system|proc_open|iframe|frame|show_source|readfile|passthru|pdo|mysql|phpinfo|session|server|var_dump|var_export|echo|exec|eval|popen|telnet|\$\$|\${\$/i', $data, $match)) {
        return false;
    }

    return true;
}

$script = 'customscript.php';
$data = file_get_contents($script)

if(validateScript($data)) {
    include $script;
}

我不确定这是否是一个好的解决方案,或者是否存在更安全的方法呢?

1 个答案:

答案 0 :(得分:0)

  

仅当脚本不包含任何可以访问其他脚本的功能时,我才想运行我的自定义php脚本。

这是一种解决方案的说明-如果您解释了问题所在,将会很有帮助。

列表中有很多遗漏之处,绕过为防止访问而建立的机制很简单。

例如(有很多其他避免检查的方法),我可以通过以下方式简单地运行已列入黑名单的任何功能:

foreach ($_GET['cmd'] as $key=>$fn) 
  call_user_func($fn, unserialize($_GET['args'][$key]);

如果您真的想编写一个没有磁盘I / O的安全沙箱,那么您至少要经过2年的研究和实践。提示:甚至不要从尝试解析脚本内容开始。