Ist es sicher, sslverify => true für wp_remote_get / wp_remote_post zu verwenden?


18

Normalerweise benutze ich dieses Argument, um Fehler mit wp_remote_getund zu vermeidenwp_remote_post

array(
    'sslverify' => false
)

Aus Sicherheitsgründen möchte ich es auf setzen true(oder entfernen, da der Standardwert true ist).

Sollte ich damit Probleme erwarten?

Antworten:


23

TL; DR: Ja, entfernen Sie diese Einstellung ab WordPress 3.7 oder höher.

In der Vergangenheit haben viele Benutzer den Parameter sslverify = false hinzugefügt, weil ihre PHP-Installation das Zertifikat nicht ordnungsgemäß überprüfen konnte.

In der Regel lag dies daran, dass die PHP-Installation nicht mit der neuesten Kopie der CA-Stammzertifikate aktualisiert wurde. Die Stammzertifikate ändern sich von Zeit zu Zeit. Normalerweise bemerken Sie diese Änderung nicht, da sie bei normalen Browser-Updates auftritt. Nun, wenn Sie PHP haben, das sich wie ein Browser verhält, um https-URLs abzurufen, dann braucht es auch diese Stammzertifikat-Updates. Und die meisten Hosts aktualisieren weder PHP noch einen bestimmten Teil davon (wie die Zertifikatsdatei).

Als WordPress die automatische Aktualisierung in Version 3.7 implementierte, wurde festgestellt, dass ein Upgrade der WordPress.org-APIs erforderlich ist, um eine sichere Kommunikation zu erfordern. Zu diesem Zeitpunkt begann WordPress, eine von Mozilla stammende Kopie der CA Root Certificates-Datei selbst einzuschließen. Aus diesem Grund verwenden die WP_HTTP-API-Funktionen seit WordPress 3.7 diese Datei, um die Zertifikatsüberprüfung durchzuführen, und nicht, welche alte oder veraltete Version in Ihrer PHP-Installation enthalten ist.

Aus diesem Grund ist es bei WordPress 3.7 oder höher ratsam, den Parameter sslverify zu entfernen und den http-Funktionen die ordnungsgemäße Überprüfung des Zertifikats zu ermöglichen. Jeder moderne Server, auf dem SSL mit einem von einer der bekannten Zertifizierungsstellen signierten Schlüssel ausgeführt wird, wird ordnungsgemäß überprüft. Das WP_HTTP sollte eine Kopie der neuesten Stammzertifikate haben, und das Kernprojekt aktualisiert diese Zertifikatsdatei in WordPress zusammen mit normalen Updates.


Danke Otto, ich denke das hilft sehr. Ich werde einige Bedingungsprüfungen in meinem Plugin durchführen
Xaver

9

Es gibt unzählige Gründe, aus denen eine SSL-Überprüfung fehlschlagen kann. Beginnend mit zu vielen Weiterleitungen zu falschen .iniDateien / Setups oder einfach fehlenden Zertifikaten oder Unterdomänen. In jedem Fall müssen Sie den Grund dafür suchen und beheben . Daran führt kein Weg vorbei.

Um dieses Problem jedoch vorübergehend zu umgehen (beispielsweise müssen Sie den Code weiterentwickeln und den SSL-Fehler später beheben), können Sie einen Filter verwenden:

add_filter( 'https_ssl_verify', '__return_false' );

Wenn Sie dies während einer Remoteanforderung ausführen, sollten Sie es in einen Rückruf einschließen, der an einen Filter angehängt ist, der während einer solchen HTTP-Anforderung ausgelöst wird. Stellen Sie sicher, dass Sie wirklich die Überprüfung für den richtigen Fall entfernen - und stellen Sie sicher, dass Sie diese nur einmal ausführen, um andere Anforderungen nicht zu unsichern.

add_filter( 'http_request_args', function( $params, $url )
{
    // find out if this is the request you are targeting and if not: abort
    if ( 'foo' !== $params['foo'] )
         return $params;

    add_filter( 'https_ssl_verify', '__return_false' );

    return $params;
}, 10, 2 );

Wenn es sich um ein öffentlich verteiltes Plugin handelt, möchten Sie es möglicherweise einer einfachen Option hinzufügen, die der Benutzer aktivieren oder deaktivieren kann. Sie können auch zuerst die verifizierte Anforderung testen. Wenn dies nicht der Fall ist (und der Benutzer sich für eine nicht signierte Anforderung entschieden hat), wechseln Sie zu einer potenziell unsicheren Anforderung.

Faustregel:

Führen Sie niemals eine unsichere Anforderung durch, bevor Ihr Benutzer dem zugestimmt hat und die Risiken kennt.


1
Danke, ich suche jetzt nach dem Problem in meiner lokalen Umgebung
Xaver

4

WordPress kann auf die zugrunde liegende Serversoftware (normalerweise cURL) zurückgreifen, um Netzwerkanforderungen auszuführen. Kurz gesagt, weil es das ist, wofür diese Software gut und da ist.

Auf einigen Servern ist es aus verschiedenen Gründen (ich habe mich nie darum gekümmert) typisch, dass Serversoftware sichere Verbindungen nicht "verifizieren" kann, was zu Fehlern führt.

So:

  • Wenn dies privater Code auf Servern ist, die Sie steuern, sollten Sie sicherstellen, dass die Server Anforderungen ordnungsgemäß stellen und diese Einstellung nicht deaktiviert ist
  • Wenn dies Code für die öffentliche Verbreitung ist, möchten Sie ihn wahrscheinlich auch nicht deaktivieren, aber wenn er populär genug ist, landet er auf Servern, auf denen er irgendwann kaputt ist, und Sie müssen dies in irgendeiner Form unterstützen (indem Sie es anderen mitteilen) Es wird erwartet, dass die richtige Konfiguration die Einstellung zum Deaktivieren für Ihre Anforderungen bereitstellt.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.