cURL – Client URL Request Library

cURL ist eine PHP-Erweiterung zum Übertragen von Daten. Es ist die sicherere Alternative zu den PHP Dateisystemfunktionen, die aktiv sind wenn in der php.ini Option allow_url_fopen eingeschaltet ist. Das Problem mit den Dateisystemfunktionen ist, dass sie für Angriffe auf den Webserver verwendet werden können.

Wenn ihr euch z.B. serverseitig (also mit PHP) Daten von einem Webdienst (z.B. Google Maps oder Facebook) abholt, könntet ihr dies mit der PHP Funktion file_get_contents(„URL für eure Daten“) tun. Das Problem: Wenn file_get_contents (Daten lesen) zur Verfügung steht, steht auch file_put_contents(Daten schreiben) und andere Funktionen zur Verfügung mit der Angreifer z.B. Dateien schreiben, löschen und manipulieren können. Oder Benutzerrechte können verändert werden. Wird allow_url_fopen abgeschaltet, sind diese Funktionen schonmal aus dem Weg.

Wenn ihr Daten mit cURL holt, müsst ihr natürlich auch unbedingt eure Übergabe-Parameter und das Ergebnis eurer Anfrage so gut es nur geht prüfen. Egal ob die Anfrage an eure eigene Webseite geht oder an eine Fremdseite.

Ein Beispiel:
Ihr möchtet die neuesten Rezepte über die mustermanns-leckerer-beispiel-kuchen.de API holen und sie in der Sidebar eurer Webseite anzeigen. Zurück erwartet ihr ein JSON Array mit den Rezepten. Nun könnte man die Anfrage auch per AJAX stellen. Man kann sie aber bereits auch serverseitig mit PHP holen.

$result = null;
$url = 'https://mustermanns-leckerer-beispiel-kuchen.de/api/?action=kuchenvonheute';
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result = curl_exec($ch);
curl_close($ch);
  • Die Variable $result dient als Container für unsere Ergebnisse.
  • Danach wird das cURL Objekt initialisiert.
  • Vor der Anfrage kann man eine ganze Reihe von Optionen festlegen, die ihr auch in der PHP cURL Dokumention einsehen könnt. Wir legen hier fest, dass wir das Ergebnis gerne in eine Variable schreiben möchten, bzw. die curl_exec Funktion das Ergebnis zurückgeben soll. Weiterhin wird die URL gesetzt mit der wir Anfrage machen.
  • Das Vorkonfigurierte cURL Objekt wird der Funktion curl_exec übergeben und sie liefert das Ergebnis der Anfrage zurück.

Ihr solltet das Ergebnis vor Verwendung auf jeden Fall Validierung. Erwartet ihr z.B. Eine Ganzzahl, konvertiert das Ergebnis direkt in den Datentyp Integer. War sowieso alles okay, habt ihr das gleiche Ergebnis, nur eben vom Datentyp Integer statt String. Wollte jemand euch irgendetwas unterjubeln bleibt nur eine Nummer übrig, Text etc. wird bei der Konvertierung verworfen.

Bei einem String lohnt sich mindestens ein strip_tags($result) , der alle HTML Tags aus einem String entfernt. Vielleicht sogar auch ein htmlentities(strip_tags($result)) , die auch Sonderzeichen in HTML Entitäten konvertiert. Was Input-Validierung und Entschärfung angeht, geht noch viel mehr und dieses Beispiel ist eigentlich nur das Minimum was man tun sollte.

Jetzt könnt ihr endlich euren JSON String dekodieren und einer Ausgabe der angeforderten Rezepte auf eurer Webseite steht nichts mehr im Wege.

Schreibe einen Kommentar