仅当脚本不包含任何可以访问其他脚本的功能时,我才想运行我的自定义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;
}
我不确定这是否是一个好的解决方案,或者是否存在更安全的方法呢?
答案 0 :(得分:0)
仅当脚本不包含任何可以访问其他脚本的功能时,我才想运行我的自定义php脚本。
这是一种解决方案的说明-如果您解释了问题所在,将会很有帮助。
列表中有很多遗漏之处,绕过为防止访问而建立的机制很简单。
例如(有很多其他避免检查的方法),我可以通过以下方式简单地运行已列入黑名单的任何功能:
foreach ($_GET['cmd'] as $key=>$fn)
call_user_func($fn, unserialize($_GET['args'][$key]);
如果您真的想编写一个没有磁盘I / O的安全沙箱,那么您至少要经过2年的研究和实践。提示:甚至不要从尝试解析脚本内容开始。