Como eu uso o filtro 'http_request_host_is_external'

3

Estou com muita dificuldade ao tentar usar o filtro http_request_host_is_external . Para alguns antecedentes, estou tentando configurar um servidor separado para lidar com atualizações de plugins e temas particulares. O problema é que ele está em um servidor separado, portanto a função wp_http_validate_url (wp-includes / http.php) do Wordpress elimina a solicitação. A seguir estão as linhas 481-503 desse arquivo.

if ( $ip ) {
        $parts = array_map( 'intval', explode( '.', $ip ) );
        if ( '127.0.0.1' === $ip
            || ( 10 === $parts[0] )
            || ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
            || ( 192 === $parts[0] && 168 === $parts[1] )
        ) {
            // If host appears local, reject unless specifically allowed.
            /**
             * Check if HTTP request is external or not.
             *
             * Allows to change and allow external requests for the HTTP request.
             *
             * @since 3.6.0
             *
             * @param bool false Whether HTTP request is external or not.
             * @param string $host IP of the requested host.
             * @param string $url URL of the requested host.
             */
            if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) )
                return false;
        }
    }

Você notará que há um comentário que menciona que devemos aplicar o filtro e fazer solicitações externas, mas o que estou tentando parece não funcionar.

    require 'plugin_update_checker.php';
apply_filters( 'http_request_host_is_external', true, "my-update-server.com", 'http://my-update-server.com/update/8b6b28f1a2604deea192076cb2343ff4/' );
$MyUpdateChecker = new PluginUpdateChecker_1_3(
    'http://my-update-server/update/8b6b28f1a2604deea192076cb2343ff4/',
    __FILE__,
    'testslug'
);

Eu pensei que se eu colocasse o filtro no arquivo principal do meu plugin ele iria cuidar disso, mas eu acho que o problema é que o pedido externo está acontecendo no atualizador do Wordpress, então talvez o meu filtro não se aplique? / p>     

por Jack Slingerland 14.11.2013 / 22:13

2 respostas

9

Você pode fazer isso:

add_filter( 'http_request_host_is_external', '__return_true' );

No entanto, observe que isso desativa esse recurso de segurança. Se você sabe que o host ou o URL não vai mudar e será sempre assim, você pode ficar mais seguro verificando isso explicitamente:

add_filter( 'http_request_host_is_external', 'allow_my_custom_host', 10, 3 );
function allow_my_custom_host( $allow, $host, $url ) {
  if ( $host == 'my-update-server' )
    $allow = true;
  return $allow;
}
    
por Otto 14.11.2013 / 22:54
0

Eu estou aparentemente um pouco enferrujado. Isso cuidou disso para mim:

add_filter( 'http_request_host_is_external', function() { return true; });
    
por Jack Slingerland 14.11.2013 / 22:23