代码之家  ›  专栏  ›  技术社区  ›  step

阻止PHP脚本访问文件系统

php
  •  1
  • step  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  0
  •   symcbean    6 年前

    我想运行我的自定义php脚本只有当脚本没有包含任何功能,可以访问其他脚本。

    这是一个解决方案的描述-如果你解释一下问题是什么,那会很有帮助。

    您的列表中有很多ommissions,绕过您为阻止访问而设置的机制是微不足道的。

    例如(有很多其他方法可以避免检查)我可以运行任何你列入黑名单的函数,只要:

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