php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 28-01-2010, 12:47
oneside
 Registrierter Benutzer
Links : Onlinestatus : oneside ist offline
Registriert seit: Feb 2004
Beiträge: 78
oneside ist zur Zeit noch ein unbeschriebenes Blatt
Standard Eigene PHP SOAP Api und die Sicherheit

Hallo,

ich arbeite mich gerade in die Api-Programmierung mit PHP und SOAP ein. Dazu habe ich ein paar sicherheitstechnische Fragen.

Ich habe mir eine Klasse für einen SOAP-Server Programmiert und einen passenden Client dazu, der auf die Methoden des Servers zugreifen kann und sich dort die Daten abholen kann.

Wie aber mache ich die Datenübertragung möglichst sicher? Der Client bekommt einen API-Key, den er dem Server bei jedem Request als Parameter für die Methode mitliefern muss. Der Server prüft den Key und gibt dann die Daten aus?

So wird aber bei jedem Request der API-Key mitgesendet. Stellt dies nicht ein Sicherheitsrisiko dar? Könnte der Key nicht irgendwie abgefangen werden und wie kann ich das am besten umgehen?

Danke und Gruß
Oneside
Mit Zitat antworten
  #2 (permalink)  
Alt 28-01-2010, 12:54
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Schau dir das mal an:
http://docs.oasis-open.org/wss/2004/...rofile-1.0.pdf

Edit:
+ SSL

Nochmal Edit:
Mist, Amica war schneller
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

Geändert von Quetschi (28-01-2010 um 12:57 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 28-01-2010, 12:55
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

wenn dir SSL zur Verfügung steht, würde ich das empfehlen, ansonsten HTTP Digest Authentication. Infos und Beispiele stehen im Handbuch zu SoapClient::SoapClient.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #4 (permalink)  
Alt 28-01-2010, 13:18
oneside
 Registrierter Benutzer
Links : Onlinestatus : oneside ist offline
Registriert seit: Feb 2004
Beiträge: 78
oneside ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke schonmal für die Antworten :-)

Also durch das UsernameToken Profile 1.0 blicke ich auf die Schnelle nicht wirklich durch. SSL will ich eigentlich nicht einsetzen, weil die Daten die übertragen werden keine wirklich sensiblen Daten sind. Durch die Autentifizierung will ich nur verhindern, dass unbefugte die Schnittstelle nutzen können.

Geändert von oneside (28-01-2010 um 13:20 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 28-01-2010, 15:53
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von oneside Beitrag anzeigen
SSL will ich eigentlich nicht einsetzen, weil die Daten die übertragen werden keine wirklich sensiblen Daten sind. Durch die Autentifizierung will ich nur verhindern, dass unbefugte die Schnittstelle nutzen können.
Ob Token, Session-ID oder Auth-Credentials - das was den Befugten vom Unbefugten unterscheidet, ist ein sensibles Datum.
Mit Zitat antworten
  #6 (permalink)  
Alt 09-02-2010, 12:15
oneside
 Registrierter Benutzer
Links : Onlinestatus : oneside ist offline
Registriert seit: Feb 2004
Beiträge: 78
oneside ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was meinst du mit sensiblem Datum?
Mit Zitat antworten
  #7 (permalink)  
Alt 09-02-2010, 12:20
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Na jegliche Anmeldeinformationen: "Ob Token, Session-ID oder Auth-Credentials - das was den Befugten vom Unbefugten unterscheidet"
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 09-02-2010, 12:58
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von oneside Beitrag anzeigen
Was meinst du mit sensiblem Datum?
Datum ist der Singular von Daten.
Sensible Daten sind solche, die nicht in falsche Hände geraten dürfen.

Ein sensibles Datum ist z.B. das Passwort eines Emailpostfachs, die private Handynummer von Frau Merkel oder die Kombination für dein Fahrradzahlenschloss.

Bleiben wir mal bei dem letzten Beispiel, dem Zahlenschloss. Wenn ich die Kombination erfahre, klaue ich dir dein Fahrrad.
Spätestens jetzt wird dir auch klar, wie viel die Information (= die Zahlenkombination, das "Datum") mindestens wert war.
Durch böswillige Handlung kann ich deinen Verlust aber noch steigern. Ich könnte dein Rad aus dem 3. Stock auf einen teuren Porsche fallen lassen. Die Polizei wird das Rad zu dir zurückverfolgen und dann wirds teuer für dich! Spätestens jetzt wird dir klar, dass du in Zukunft vorsichtiger (sensibler) mit deiner Zahlenschlosskombination (Daten) umgehen musst.

Zitat:
SSL will ich eigentlich nicht einsetzen, weil die Daten die übertragen werden keine wirklich sensiblen Daten sind. Durch die Autentifizierung will ich nur verhindern, dass unbefugte die Schnittstelle nutzen können.
Da werden also Authentifizierungsdaten übertragen. Die sind sensibel! Also solltest du doch SSL einsetzen.

Ich hoffe nun ist klar was ich sagen wollte.
Mit Zitat antworten
  #9 (permalink)  
Alt 09-02-2010, 13:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Einfach toll, du solltest für die Sendung mit der Maus schreiben
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 09-02-2010, 13:22
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Da werden also Authentifizierungsdaten übertragen. Die sind sensibel! Also solltest du doch SSL einsetzen
Wenn lediglich die Authentifizierungsdaten, jedoch nicht die Payload sensibel sind, ist das UT schon ein ganz brauchbares Verfahren.

Ich hab die genaue Implementierung von UT nicht mehr im Kopf aber ich glaub es läuft ungefährt so ab:

Clientseitig wird ein Hash aus dem Passwort, Datum-Zeit und einer Zufallszahl erzeugt. An den Server wird der Hash, sowie das verwendete Datum-Zeit und die Zufallszahl übertragen - nicht jedoch das Passwort selbst.

Der Server prüft dann zunächst ob Datum-Zeit innerhalb einer bestimmten Toleranz liegt (Datum-Zeit von gestern wird z.B. von vornherein ungültig), danach wird aus den übermittelten Datum-Zeit und Zufallszahl zusammen mit dem Server bekannten Passwort der Hash erzeugt und mit dem übergebenen verglichen.

Stimmt alles zusammen wird noch überprüft, ob die Daten bereits innerhalb der erlaubten Zeitspanne verwendet wurden - wenn nicht, wird die Anfrage durchgewunken, falls doch kann davon ausgegangen werden, dass der Traffic abgehört wurde und versucht wurde mit den Daten eine weitere Anfrage zu starten - also Ende.

Es muss aber klar sein, dass ohne SSL die transportierten Daten für jedermann lesbar bleiben - es kommt also stark auf die Anwendung an, ob man auf SSL vielleicht grad noch verzichten kann.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #11 (permalink)  
Alt 09-02-2010, 14:24
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von Quetschi Beitrag anzeigen
Wenn lediglich die Authentifizierungsdaten, jedoch nicht die Payload sensibel sind, ist das UT schon ein ganz brauchbares Verfahren.
Ich kenne UT nicht, aber wenn es über HTTP läuft, muss in der Anfrage irgendwas drin sein, um die Zustandslosigkeit von HTTP zu überwinden. Ich nenne es jetzt der Einfachheit halber mal das Token
Der Server weiß, dass eine Anfrage mit diesem Token berechtigt ist, führt sie aus und schickt die Antwort zurück. So hast du es ja gerade beschrieben.

Zitat:
Zitat von Quetschi Beitrag anzeigen
Stimmt alles zusammen wird noch überprüft, ob die Daten bereits innerhalb der erlaubten Zeitspanne verwendet wurden - wenn nicht (Anm.: also wenn das Token gültig ist), wird die Anfrage durchgewunken
Sollte ein Angreife in den Besitz des Token kommen, kann er die Anfrage manipulieren oder zumindest man in the middle sein und die Antwort mitlesen.
Läuft die ganze Kommunikation über SSL, ist das ausgeschlossen.

Jetzt noch einmal das Zitat vom TO, um das es geht:
Zitat:
SSL will ich eigentlich nicht einsetzen, weil die Daten die übertragen werden keine wirklich sensiblen Daten sind. Durch die Autentifizierung will ich nur verhindern, dass unbefugte die Schnittstelle nutzen können.
Wie eben dargestellt kann ohne SSL eben nicht verhindert werden, dass Unbefugte die Schnittstelle nutzen. Sie könnten nämlich ein Token abfangen oder die Nutzung eines Befugten belauschen oder sogar manipulieren.

Um es mal weniger technisch aufzurollen: Die Anforderung lautet "will ich nur verhindern, dass unbefugte die Schnittstelle nutzen können". Der TO glaubt, das "durch die Autentifizierung" erreichen zu können. Das ist ein Irrglaube! Wer das nicht einsieht, soll mir mal eine Bank zeigen, die Online-Banking mit Authentifizierung ohne SSL betreibt.
Mit Zitat antworten
  #12 (permalink)  
Alt 09-02-2010, 14:39
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Sollte ein Angreife in den Besitz des Token kommen, kann er die Anfrage manipulieren oder zumindest man in the middle sein und die Antwort mitlesen.
Dazu müsste er die ursprüngliche Client-Anfrage vorm Server abfangen und (schnell) manipulieren, da das Token nur einmalig und zeitlich begrenzt gültig ist. Das mitlesen der Antwort ist dann freilich eine andere Geschichte.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #13 (permalink)  
Alt 10-02-2010, 16:41
oneside
 Registrierter Benutzer
Links : Onlinestatus : oneside ist offline
Registriert seit: Feb 2004
Beiträge: 78
oneside ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo und vielen Dank für die ganzen Infos.

Ich habe das zwischenzeitlich ungefair so gelöst, wie Quetschi mit dem Token beschrieben hat.

Ich erstelle einen Token aus einem nicht zu übermittelnden (also geheimen) Schlüssel, der TextID und einem Zeitstempel. Den erzeugten Token, den Zeitstempel und die TextID übermittel ich beim Api Aufruf mit. Die Api reproduziert den Token, prüft dann, ob der Token echt ist und ob die Zeitspanne noch innerhalb X liegt.

Die Situation ist vereinfacht diese:

Die API soll dafür genutzt werden soll, um Texte aus einer Datenbank auslesen zu können. Diese Texte sind sowieso öffentlich auf einer Webseite, also keine wirklich sensiblen Daten.

Mit dem Aufruf der Api wird eine ID übergeben und man bekommt dann einen Text zu dieser zurückgeliefert. Pro Aufruf kann nur ein Text ausgelesen werden.

Wenn jemand also den Token bzw die Parameter abfängt, kann er höchstens den Text abfangen/auslesen, der gerade angefordert wurde. Klaut also jemand den Token, kann er nur für eine minimale Zeitspanne einen einzelnen Text abfangen. Da könnte er sich auch einfach den Text von der Website kopieren und so klauen...

Verhindern will ich lediglich, dass jemand einfach die übermittelte TextID in den abgefangenen Parametern ändern kann und dann jeden beliebigen Text durch ändern der TextID auslesen kann.

Gruß
Oneside
Mit Zitat antworten
  #14 (permalink)  
Alt 10-02-2010, 16:47
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von oneside Beitrag anzeigen
Diese Texte sind sowieso öffentlich auf einer Webseite [...]. Da könnte er sich auch einfach den Text von der Website kopieren und so klauen...
Welche Aufgabe hat dann die API? Sowas wie ein "Witz des Tages"- oder Zitat-Server?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SOAP ist Tot Slava Off-Topic Diskussionen 5 22-04-2008 22:33
Soap BoFiaZ PHP Developer Forum 0 11-01-2008 16:24
PHP und SOAP MS4747 PHP Developer Forum 11 31-08-2007 17:12
xml - soap - php amassgehtnu XML 1 15-04-2005 13:41
php5 soap server und soap xul client tutorial beebob Off-Topic Diskussionen 10 09-01-2005 02:14

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:59 Uhr.