选择语言 :

 Core_Core::check_system_request_allow

检查内部调用HASH是否有效

boolean Core_Core::check_system_request_allow( )
返回值
  • boolean
File: ./core/classes/core.class.php
protected static function check_system_request_allow()
{
    $hash      = $_SERVER['HTTP_X_MYQEE_SYSTEM_HASH'];      // 请求验证HASH
    $time      = $_SERVER['HTTP_X_MYQEE_SYSTEM_TIME'];      // 请求验证时间
    $rstr      = $_SERVER['HTTP_X_MYQEE_SYSTEM_RSTR'];      // 请求随机字符串
    $project   = $_SERVER['HTTP_X_MYQEE_SYSTEM_PROJECT'];   // 请求的项目
    $path_info = $_SERVER['HTTP_X_MYQEE_SYSTEM_PATHINFO'];  // 请求的path_info
    $isadmin   = $_SERVER['HTTP_X_MYQEE_SYSTEM_ISADMIN'];   // 是否ADMIN
    $isrest    = $_SERVER['HTTP_X_MYQEE_SYSTEM_ISREST'];    // 是否RESTFul请求
    if (!$hash || !$time || !$rstr || !$project || !$path_info) return false;

    // 请求时效检查
    if (microtime(1) - $time > 600)
    {
        Core::log('system request timeout', 'system-request');
        return false;
    }

    // 验证IP
    if ('127.0.0.1'!=HttpIO::IP && HttpIO::IP != $_SERVER["SERVER_ADDR"])
    {
        $allow_ip = Core::config('core.system_exec_allow_ip');

        if (is_array($allow_ip) && $allow_ip)
        {
            $allow = false;
            foreach ($allow_ip as $ip)
            {
                if (HttpIO::IP == $ip)
                {
                    $allow = true;
                    break;
                }

                if (strpos($allow_ip, '*'))
                {
                    // 对IP进行匹配
                    if (preg_match('#^' . str_replace('\\*', '[^\.]+', preg_quote($allow_ip, '#')) . '$#', HttpIO::IP))
                    {
                        $allow = true;
                        break;
                    }
                }
            }

            if (!$allow)
            {
                Core::log('system request not allow ip:' . HttpIO::IP, 'system-request');
                return false;
            }
        }
    }

    $body = http_build_query(HttpIO::POST(null, HttpIO::PARAM_TYPE_OLDDATA));

    // 系统调用密钥
    $system_exec_pass = Core::config('system_exec_key');

    $key = Core::config()->get('system_exec_key', 'system', true);

    if (!$key || abs(TIME-$key['time'])>86400*10)
    {
        return false;
    }

    $other = $path_info .'_'. ($isadmin?1:0) .'_'. ($isrest?1:0) . $key['str'];

    if ($system_exec_pass && strlen($system_exec_pass) >= 10)
    {
        // 如果有则使用系统调用密钥
        $newhash = sha1($body . $time . $system_exec_pass . $rstr .'_'. $other);
    }
    else
    {
        // 没有,则用系统配置和数据库加密
        $newhash = sha1($body . $time . serialize(Core::config('core')) . serialize(Core::config('database')) . $rstr .'_'. $other);
    }

    if ($newhash==$hash)
    {
        return true;
    }
    else
    {
        Core::log('system request hash error', 'system-request');
        return false;
    }
}