webentwicklung-frage-antwort-db.com.de

Wie verwende ich den Filter "http_request_Host_is_external"?

Es fällt mir wirklich schwer, den http_request_Host_is_external-Filter zu verwenden. Für einige Hintergrundinformationen versuche ich, einen separaten Server einzurichten, um private Plugins und Themenupdates zu verarbeiten. Das Problem ist, dass es sich auf einem separaten Server befindet, sodass die Wordpress-Funktion wp_http_validate_url (wp-includes/http.php) die Anforderung beendet. Das Folgende sind die Zeilen 481-503 dieser Datei.

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;
        }
    }

Sie werden bemerken, dass es einen Kommentar gibt, der erwähnt, dass wir den Filter anwenden und externe Anfragen stellen können, aber was ich versuche, scheint nicht zu funktionieren.

    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'
);

Ich dachte, wenn ich den Filter in der Hauptdatei meines Plugins setze, würde er sich darum kümmern, aber ich denke, das Problem ist, dass die externe Anfrage direkt im Wordpress-Updater stattfindet, also trifft mein Filter möglicherweise nicht zu?

3

Du kannst das:

add_filter( 'http_request_Host_is_external', '__return_true' );

Beachten Sie jedoch, dass dadurch diese Sicherheitsfunktion deaktiviert wird. Wenn Sie wissen, dass sich der Host oder die URL nicht ändern wird und dies auch immer sein wird, können Sie sicherer sein, indem Sie dies explizit überprüfen:

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;
}
9
Otto

Ich bin anscheinend ein bisschen verrostet. Das hat sich für mich erledigt:

add_filter( 'http_request_Host_is_external', function() { return true; });
0