Ist es sicher, Access-Control-Allow-Origin-Fehler (CORS-Ursprung) mit einer PHP-Header-Direktive zu beheben?

Ich versuche, ein Formidable Pro Form von einer WordPress-Seite zum anderen zu zeigen. Ich folgte der Entwickler-API und der REST-API, sah sich jedoch einem CORS-Problem gegenüber.

Dann habe ich einen Vorschlag in einem Forenthread gefunden, der vorschlägt, diese Codezeile in die functions.php der Site einzufügen, auf der sich das ursprüngliche Formular befindet:

header("Access-Control-Allow-Origin: *");

Ich habe diesen Code ausprobiert und es funktionierte einwandfrei.

Meine Frage ist: Öffnet dieser Code Sicherheitsrisiken oder andere Sicherheitslücken?

Die Lösung scheint zu einfach für ein Problem zu sein, dem viele Menschen gegenüberstehen.

Ihre Eingabe wird sehr geschätzt.

Solutions Collecting From Web of "Ist es sicher, Access-Control-Allow-Origin-Fehler (CORS-Ursprung) mit einer PHP-Header-Direktive zu beheben?"

Ja, Sie öffnen Ihre Website, um über AJAX zu einem anderen Skript im gesamten Web aufgefordert zu werden.

Es wäre besser, wenn Sie den Ursprung auf eine bestimmte Remotedomäne beschränken, von der Sie die API verwenden, wie in diesem Beispiel :

 header("Access-Control-Allow-Origin: http://mozilla.com"); 

Wie die Dokumentation von mozilla jedoch feststellt, kann ein Client den Ursprung abzweigen, aber die Begrenzung der Sites, die ein Gelegenheitsanwender verbinden kann, ist eine Abschreckung für einige Angriffe.

Noch besser, Sie können Ihre Anfrage nur auf die Methoden beschränken, die Sie wirklich zulassen müssen , das Wichtigste ist dieses Snippet, und es funktioniert für mehrere Domains, wenn Sie die Variable $_SERVER['HTTP_ORIGIN'] :

 add_action('rest_api_init', function() { /* unhook default function */ remove_filter('rest_pre_serve_request', 'rest_send_cors_headers'); /* then add your own filter */ add_filter('rest_pre_serve_request', function( $value ) { $origin = get_http_origin(); $my_sites = array( 'http://site1.org/', 'http://site2.net', ); if ( in_array( $origin, $my_sites ) ) { header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) ); } else { header( 'Access-Control-Allow-Origin: ' . esc_url_raw( site_url() ) ); } header( 'Access-Control-Allow-Methods: GET' ); return $value; }); }, 15); 

Wie Sie sehen, verwendet dieser Ausschnitt die function get_http_origin, die von WordPress bereitgestellt wird. Er gibt jedoch null oder leer zurück, wenn der Schlüssel HTTP_ORIGIN nicht im Array $_SERVER ist. Daher ist er für das PHP-Skript nicht verfügbar, möglicherweise weil er blockiert ist mit dem Cloudflare-Proxy, den Sie verwenden. Ich würde schnell < ?php phpinfo(); ?> , mit einem Skript mit dem < ?php phpinfo(); ?> < ?php phpinfo(); ?> , wenn diese Variable gefüllt ist.

Vielleicht ist die Ursprungsseite in einer anderen Kopfzeile von cloudflare aufgefüllt, und Sie könnten sie in einer function verwenden, die an den http_origin Filter http_origin . Wenn Sie bis zu diesem Punkt verloren gegangen sind, bearbeiten Sie Ihre ursprüngliche Frage, indem Sie den Inhalt der _SERVER-Variablen mit Ausnahme Ihrer Dateisystempfade oder Kennwörter veröffentlichen.

Ich würde gerne helfen.

Hintergrund – Browser beschränken den Remote-Zugriff von Skripten nur auf die Site, von der sie geladen wurde. Wenn diese Art von Prüfung nicht durchgeführt wurde, wäre es während des Besuchs einer Website X möglich gewesen, Daten an Ihr Google Mail-Konto zu senden (wenn Sie angemeldet sind), ohne Ihren Benutzer und Ihr Passwort erraten zu müssen, weil der Browser dies tun würde habe die richtigen Authentifizierungscookies an Google Mail gesendet.

Das CORS “Protokoll” hilft Ihnen, diese Einschränkung bei Bedarf zu lockern.

Die Frage, die Sie sich stellen sollten, ist, brauche ich sie? Auf der einen Seite kann ich nicht nachvollziehen, warum 99% der WordPress-Sites es brauchen, auf der anderen Seite sind WordPress-Cookies relativ kurzlebig und 99% der WordPress-Sites werden kein Ziel für solch einen zufälligen Angriff sein.

Ich würde sagen, dass da die Rest-API eine mutierende ist und Zugriff auf private Informationen hat, sollten Sie keine Rest-API in Ihrer Lösung verwenden, wenn Sie cors aktivieren müssen, schreiben Sie besser Ihre eigene “Nur-Lesen” API.