VaultPress::validate_api_signature PHP Méthode

validate_api_signature() public méthode

    function validate_api_signature()
    {
        global $__vp_validate_error;
        if (!empty($_POST['signature'])) {
            if (is_string($_POST['signature'])) {
                $sig = $_POST['signature'];
            } else {
                $__vp_validate_error = array('error' => 'invalid_signature_format');
                return false;
            }
        } else {
            $__vp_validate_error = array('error' => 'no_signature');
            return false;
        }
        $secret = $this->get_option('secret');
        if (!$secret) {
            $__vp_validate_error = array('error' => 'missing_secret');
            return false;
        }
        if (!$this->get_option('disable_firewall')) {
            if (!$this->check_firewall()) {
                return false;
            }
        }
        $sig = explode(':', $sig);
        if (!is_array($sig) || count($sig) != 2 || !isset($sig[0]) || !isset($sig[1])) {
            $__vp_validate_error = array('error' => 'invalid_signature_format');
            return false;
        }
        // Pass 1 -- new method
        $uri = preg_replace('/^[^?]+\\?/', '?', $_SERVER['REQUEST_URI']);
        $post = $_POST;
        unset($post['signature']);
        // Work around for dd-formmailer plugin
        if (isset($post['_REPEATED'])) {
            unset($post['_REPEATED']);
        }
        ksort($post);
        $to_sign = serialize(array('uri' => $uri, 'post' => $post));
        if ($this->can_use_openssl()) {
            $sslsig = '';
            if (isset($post['sslsig'])) {
                $sslsig = $post['sslsig'];
                unset($post['sslsig']);
            }
            if (openssl_verify(serialize(array('uri' => $uri, 'post' => $post)), base64_decode($sslsig), $this->get_option('public_key'))) {
                return true;
            } else {
                $__vp_validate_error = array('error' => 'invalid_signed_data');
                return false;
            }
        }
        $signature = $this->sign_string($to_sign, $secret, $sig[1]);
        if ($sig[0] === $signature) {
            return true;
        }
        $__vp_validate_error = array('error' => 'invalid_signed_data');
        return false;
    }
VaultPress