HP-Bauer: Allgemeine Frage zu REST-Funktion mit MySQL

Hallo,

ich möchte für eine Online-Anwendung eine REST-Funktionsbibliothek aufbauen, damit man mit verschiedenen Programmen darauf zugreifen kann.

In einer Funktion stelle ich z.B. ein Bild per GET zur Verfügung. Dieses Bild wird aber nur ausgegeben, wenn die übermittelte UserId und ein dazugehöriges Kennwort übereinstimmen. Diese Sicherheitsabfrage findet über MySQL statt. Ich finde es jetzt aber nicht sonderlich sicher, wenn das Kennwort in der URL übertragen wird (z.B. www.xyz.de/scripts/getImage.php?userid=1111&userpw=test&image=test.jpg). Wie seht ihr das? Und wie würdet ihr das lösen? Mit einer URL mit GET-Parametern ist es nämlich am einfachsten, um auf das Bild auch mit C++ und Visual Basic zuzugreifen.

MfG,

HP-Bauer

  1. Tach!

    Ich finde es jetzt aber nicht sonderlich sicher, wenn das Kennwort in der URL übertragen wird (z.B. www.xyz.de/scripts/getImage.php?userid=1111&userpw=test&image=test.jpg).

    Bei einer HTTPS-Verbindung wird zunächst die Verschlüsslung ausgehandelt und dann die gewünschte URL über diesen verschlüsselten Kanal übertragen. Mit HTTPS wäre dein Problem keins mehr.

    Und wie würdet ihr das lösen?

    Ohne HTTPS gäbe es noch einen POST-Request, bei dem das Passwort aber auch im Klartext, nur eben nicht in der URL übertragen wird. Und du könntest auf Sessions setzen, dann wird nach der Anmeldung nur noch der Session-Key übertragen. Der kann zwar von einem Mitleser mitgenutzt werden, aber er verfällt irgendwann. Wenn dir das als "Sicherheit" reicht, brauchts kein HTTPs.

    dedlfix.

    1. Vielen Dank für die Antwort. Aber wenn ich die URL nur mit https://www.xyz.de/scripts/getImage.php?userid=1111&userpw=test&image=test.jpg aufrufe, dann kann diese doch auch abgefangen werden, zumindest auf dem PC, auf dem sie aufgerufen wurde (wenn es z.B. ein Terminal ist). Oder sehe ich dies falsch?

      MfG,

      HP-Bauer

      1. Tach!

        Aber wenn ich die URL nur mit https://www.xyz.de/scripts/getImage.php?userid=1111&userpw=test&image=test.jpg aufrufe, dann kann diese doch auch abgefangen werden,

        Nicht unterwegs.

        zumindest auf dem PC, auf dem sie aufgerufen wurde (wenn es z.B. ein Terminal ist). Oder sehe ich dies falsch?

        Auf dem Sender liegt die Information zur Authentisierung in jedem Fall vor, sonst kommt er ja nicht in den Server rein. Abfangen ist da also prinzipiell immer möglich.

        Wenn es dir aber um das Verhindern von Schulterguckern geht, ja, dann ist die URL und jede andere Stelle ungünstig, die am Bildschirm gelesen werden kann.

        dedlfix.

        1. Hallo,

          aber irgendwie scheint mir das schon etwas unsicher zu sein, das Passwort trotz SSL einfach in der URL zu übertragen. Das sollte irgendwie anders übermittelt werden. Das Script soll ja auch nicht unbedingt vom Browser aus angesprochen werden können, sondern wenn möglich nur von diversen Apps auf PC´s und mobilen Endgeräten.

          MfG,
          HP-Bauer

          Tach!

          Aber wenn ich die URL nur mit https://www.xyz.de/scripts/getImage.php?userid=1111&userpw=test&image=test.jpg aufrufe, dann kann diese doch auch abgefangen werden,

          Nicht unterwegs.

          zumindest auf dem PC, auf dem sie aufgerufen wurde (wenn es z.B. ein Terminal ist). Oder sehe ich dies falsch?

          Auf dem Sender liegt die Information zur Authentisierung in jedem Fall vor, sonst kommt er ja nicht in den Server rein. Abfangen ist da also prinzipiell immer möglich.

          Wenn es dir aber um das Verhindern von Schulterguckern geht, ja, dann ist die URL und jede andere Stelle ungünstig, die am Bildschirm gelesen werden kann.

          dedlfix.

          1. Tach!

            aber irgendwie scheint mir das schon etwas unsicher zu sein, das Passwort trotz SSL einfach in der URL zu übertragen.

            Das ist genauso unsicher, wie die der gesamte Rest der verschlüsselten Übertragung. Wie bereits gesagt, wird die URL erst nach dem Aufbau der Verschlüsslung übermittelt.

            Das Script soll ja auch nicht unbedingt vom Browser aus angesprochen werden können, sondern wenn möglich nur von diversen Apps auf PC´s und mobilen Endgeräten.

            Auch die können HTTPS (nutzen).

            dedlfix.

    2. Hi,

      Und wie würdet ihr das lösen?

      Wenn man HTTP (REST) sprechen will, dann gehören Login-Informationen in den Authorization-Header.

      Ohne HTTPS gäbe es noch einen POST-Request,

      Das widerspricht aber dem REST-Ansatz.

      Bis die Tage,
      Matti

      1. Hallo,

        vielen Dank für die Antwort.

        Wenn man HTTP (REST) sprechen will, dann gehören Login-Informationen in den Authorization-Header.

        Gibt es hierzu irgendein einfaches Beispiel? Habe im Netz gesucht, aber nichts wirklich einfaches gefunden.

        Ich habe mir auch OAuth angesehen, aber dies scheint ziemlich kompliziert zu sein.

        MfG,
        HP-Bauer

  2. wenn das Kennwort in der URL übertragen wird

    Das darfst du nicht machen. Verwende ein TLS-Clientzertifikat. Alternativ setze HTTP-Authentifizierung mittels WSSE ein. Alles andere ist leider untauglich für die Anforderung.

    1. wenn das Kennwort in der URL übertragen wird
      Das darfst du nicht machen. Verwende ein TLS-Clientzertifikat. Alternativ setze HTTP-Authentifizierung mittels WSSE ein. Alles andere ist leider untauglich für die Anforderung.

      Gibt es für die HTTP-Authentifizierung mittels WSSE auch ein einfaches Beispiel? Habe im Netz leider kein einfaches Beispiel gefunden. Mit TLS meinst du SSL? Finde das aber trotzdem nicht so ganz sicher, da das Script am besten gar nicht über den Browser aus ansprechbar sein soll, sondern nur von dem App auf dem PC oder mobilen Endgeräten.

      MfG,

      HP-Bauer

      1. Tach!

        Finde das aber trotzdem nicht so ganz sicher, da das Script am besten gar nicht über den Browser aus ansprechbar sein soll, sondern nur von dem App auf dem PC oder mobilen Endgeräten.

        HTTP(S) kennt keine Unterschiede, was den Client anbelangt. Wenn du das protokoll einigermaßen richtig verwendest, ist es komplett egal, ob du Browser, Spider, Bot oder eine x-beliebige andere Anwendung bist.

        dedlfix.

      2. Gibt es für die HTTP-Authentifizierung mittels WSSE auch ein einfaches Beispiel?

        http://www.xml.com/pub/a/2003/12/17/dive.html

        Habe im Netz leider kein einfaches Beispiel gefunden.

        Das ist beschämend. Lerne, Suchmaschinen effektiv zu benutzen. http://searchlores.org/indexo.htm

        Mit TLS meinst du SSL?

        https://de.wikipedia.org/wiki/Transport_Layer_Security

        Finde das aber trotzdem nicht so ganz sicher, da das Script am besten gar nicht über den Browser aus ansprechbar sein soll, sondern nur von dem App auf dem PC oder mobilen Endgeräten.

        Das ist gehupft wie gesprungen, HTTP trifft keine Unterscheidung zwischen Desktopbrowser oder Mobilgerätbrowser oder Clientanwendung.