PHP-Skripte und User-Input

Hallo,

ich würde gerne in einem auf PHP/MySQL basierenden CMS eine Anmelde-Möglichkeit für Kunden vorsehen, um Informationen von einer externen Domain abzurufen und diese dann auf meiner Seite eingebunden darzustellen. Sowohl meine Seite als auch die Kunden sind bei der externen Domain mit Benutzer-Name und Kennwort registriert. In dem CMS soll auf jeder Seite ein Formular angezeigt werden, in welches der Kunde seinen Benutzernamen und sein Passwort eingeben kann. Mit einem PHP-Skript werden dann mit diesen Benutzer-Eingaben sowie meinen Registrierungs-Daten die Informationen von der externen Domain abgerufen:

PHP:
$this->externeAdresse = 'https://www.***.de/login.php?seitenName=***&seitenPasswort=***'.'&benutzerName='.$this->benutzerName.'&benutzerPasswort='.$this->benutzerPasswort;
$this->externeInformationen = simplexml_load_file($this->externeAdresse);
"seitenName" ist die Kennung, mit der ich bei der externen Domain registriert bin und die meine Seite dazu berechtigt, Inhalte von der externen Domain für registrierte Benutzer abzurufen und auf meiner Seite einzubinden.
"seitenPasswort" ist das zu meiner Kennung gehörende Passwort.

"benutzerName" und "benutzerPasswort" sind, wie der Name schon sagt, die Benutzer-Eingaben im Formular.

$this->externeInformationen beinhaltet dann die Informationen von der externen Domain.

Auf die externe Domain habe ich abgesehen vom Laden der Inhalte per URL keinen Zugriff, ich bin dort lediglich mit meiner Seite registriert und dazu berechtigt, für registrierte Kunden Informationen abzurufen und auf meiner Seite einzubinden. Mich interessiert jetzt, ob diese Vorgehensweise unsicher ist und wenn ja, wie mögliche Angriffe aussehen könnten? Dabei interessiert mich in erster Linie die Sicherheit des von mir einzurichtenden CMS, weil die externe Seite mir diese Vorgehensweise quasi vorschreibt. Ich möchte bei meinen Betrachtungen zunächst von ungefilterten Benutzer-Eingaben im Formular ausgehen.

Frohe Weihnachten,
DerKreuzer

Edit: PHP-Code ergänzt
 
Zuletzt bearbeitet:
Wer auch immer diese externe Seite betreibt, ich würde sofort die Zusammenarbeit einstellen, wenn dort Login-Daten via GET-Parameter übergeben werden. Wenn diese Seite z.B. dann auch noch irgendwelche weiteren Seiten aufruft oder Links auf andere Seiten anbietet, tauchen diese GET-Daten nämlich immer im Referer-Feld auf.

Für dein CMS sehe ich da zwar nicht unbedingt Angriffsmöglichkeiten, aber du kannst die Sicherheit dieser GET-Daten trotzdem nicht zu 100% gewährleisten. Schon eine XSS-Lücke kann im dümmsten Fall dafür sorgen, dass jemand an die aufgerufene URL und somit an die Login-Daten kommt. Daher sollten, wenn überhaupt, Session-spezifische Tokens verwendet werden, in die auch Browserdaten etc. des Users einfliessen, so dass diese Tokens nicht mit jedem beliebigen Browser oder Skript verwendet werden können.

Und ungefilterte Nutzereingaben gehen mal überhaupt nicht. Damit öffnest du Injections Tür und Tor. Von daher würde ich in einem solchen Fall vermutlich auch die Zusammenarbeit mit dir beenden.

Mal davon abgesehen wird dein Code nicht funktionieren. Du weist damit lediglich der Klassen-Variable 'externeInformationen' die URL als Wert zu. Du müsstest schon file_get_contents() oder curl verwenden um an die Inhalte zu kommen.
 
Hallo bitmuncher,

vielen Dank für Deine Antwort und entschuldige die Nachlässigkeit(bin zur Zeit erkältet und nicht ganz klar im Kopf). Ich habe den fehlenden PHP-Code ergänzt.

Das mit den ungefilterten Eingaben habe ich leider auch nicht völlig richtig ausgedrückt. Eigentlich wollte ich schreiben, dass ich AUCH von ungefilterten Eingaben ausgehen möchte. Natürlich werde ich die Eingaben auf meiner Seite filtern, aber mich interessiert schon, was in diesem Fall passieren kann, wenn man aus Nachlässigkeit darauf verzichtet.

Datenbank-Abfragen sollen mit diesen Formular-Eingaben keine generiert werden. Verstehe ich das richtig, dass sich damit das Risiko vermutlich auf die von Dir erwähnten XSS-Angriffe, das Ausspionieren von URL-Log-Dateien, sowie auf eventuelle Exploits im PHP-Interpreter selbst bzw. in der hier verwendeten Funktion simplexml_load_file() beschränkt?

Ich werde mal mit den Betreibern der externen Domain sprechen, ob man die Anmeldung nicht mittels POST durchführen kann.
 
Wer auch immer diese externe Seite betreibt, ich würde sofort die Zusammenarbeit einstellen, wenn dort Login-Daten via GET-Parameter übergeben werden.

ACK!

Mal davon abgesehen wird dein Code nicht funktionieren. Du weist damit lediglich der Klassen-Variable 'externeInformationen' die URL als Wert zu. Du müsstest schon file_get_contents() oder curl verwenden um an die Inhalte zu kommen.
Was stimmt nicht mit simplexml_load_file()? :)
 
Hallo mime,

ich hatte in meinem Eröffnungs-Posting die Zeile zum Laden der Daten vergessen. Aufgrund bitmunchers Hinweis habe ich dann simplexml_load_file() nachträglich im Original-Beitrag ergänzt.
 
@mime
bzgl. simplexml_load_file().
Ich finde die Verwendung von simplexml_load_file() in so fern kritisch, weil simplexml_load_file() das Zertifikat bei einer https-verbindung nicht validiert, zumindest wird dies in der Dokumentation nicht angegeben.
Hier ist cUrl definitiv das Beste was PHP IMO zu bieten hat, und der Schwerpunkt seiner Frage lag ja auf Sicherheit.
Von daher wäre das Laden des XML mittels cUrl und dann das laden des Strings mittels simplexml_load_string() viel sicherer.

Gleiche Argumentation gilt auch für file_get_contents() aber Bit hat ja nur gesagt das der Inhalt i.w. geholt werden muss, und je nachdem hat XML noch andere Sicherheitsmechanismen.
Gruß

Fluffy
 
Zurück
Oben