Skip to content
This repository was archived by the owner on Jan 1, 2025. It is now read-only.
This repository was archived by the owner on Jan 1, 2025. It is now read-only.

Referer wird beim GeoCode nicht gesetzt #13

Description

@Xendiadyon

Wenn man den API-Key in der Google-Search-Console einschränkt, muss ein Referer gesetzt sein:
Über die file_get_contents wird standardmäßig kein Referer gesetzt, d.h. hier wird die API-Abfrage blockiert:
Z. 153: https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L153
$arrGeo = json_decode(file_get_contents($strURL), true);

{
   "error_message" : "API keys with referer restrictions cannot be used with this API.",
   "results" : [],
   "status" : "REQUEST_DENIED"
}

Stattdessen müsste hier ein Referer übergeben werden. Das ist mit file_get_contents zwar möglich, aber nicht wirklich gut machbar:

            $opts = array(
                'http'=>array(
                    'header'=>"Referer: MEINEDOMAIN\r\n"
                )
            );
            $context = stream_context_create($opts);
            $arrGeo = json_decode(file_get_contents($strURL), true,$context);

Nun gut, falls dieser Aufruf nicht erfolgreich ist, wird ja im Anschluss über curl probiert (geoCodeCurl).
Aber auch hier wird kein Referer gesetzt.
https://stackoverflow.com/questions/51146680/google-api-key-http-referrers-issue-using-curl-php

https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L193
if (curl_setopt($curl, CURLOPT_URL, $strGeoURL) && curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1) && curl_setopt($curl, CURLOPT_HEADER, 0))

Leider gibt es hier gerade ein unlösbares Problem:
Wenn Google-Map-API-Keys mit HTTP-Verweis-URLs verwendet werden, kann die Geolocation-API nicht angesteuert werden (da dies immer serverseitig funktioniert, ein Referer wird von Google einfach ignoriert.
Wenn Google-Map-API-Keys mit IP-Filter verwendet werden, kann zwar die Geolocation-API verwendet werden, aber die Static Maps im Backend können dann nicht mehr angezeigt werden, da die Client-IP (Browser) unterschiedlich von der Server-IP ist.
Der API-Key in den Contao-Einstellungen wird also für zwei unterschiedliche Funktionsweisen (Geolocation und Map-Anzeige) verwendet. Sobald man nach IP oder HTTP-Verweis-URL filtert (und das sollte man unbedingt tun, jetzt wo die Google Maps potentiell Geld kosten) kann man nur das eine oder das andere mit dem API-Key machen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions