Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   DataSnap: IP vom Webserver (https://www.delphipraxis.net/190219-datasnap-ip-vom-webserver.html)

Darlo 13. Sep 2016 14:16

DataSnap: IP vom Webserver
 
Hallo zusammen,

ich habe folgendes Problem: Für eine Zugangskontrolle auf einen Rest-Server (DataSnap) brauche ich die IP der Webserver über den der Rest-Service aufgerufen wird. Die Anfrage erfolgt über eine Webseite mit AngularJS.

Also
Client -> Webserver -> Rest-Server

Jetzt bekomme ich mit folgenden Code die IP-Adresse des Clients zurück, und nicht die des Webservers.

Delphi-Quellcode:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  showmessage(Request.RemoteAddr);
end;
Wie kann ich die IP des Webservers bekommen?

Phoenix 13. Sep 2016 14:40

AW: DataSnap: IP vom Webserver
 
Die Kommunikation läuft vermutlich eher so:

Client --> "Gib mir mal die index.html" --> Webserver
Webserver --> "Hier haste das Zeug" --> Client
Client (wertet index.html aus) --> "Ah, ich brauch noch diese Images, dieses CSS und das Javascript da" --> Webserver
Webserver --> "Hier haste das Zeug" --> Client
Angular-App im Client/Browser --> "Ich brauch Daten" --> Direkt an REST-Server

Sonst würde der Rest-Server ja auch nicht die IP des Client bekommen.

Im Prinzip kann jeder, der die Adresse des REST-Servers kennt, Anfragen da hin schicken. Das kann die Angular-App im Client/Browser sein, aber das kann auch ein Angreifer sein, der die App mal angesehen hat.

Und selbst wenn du die Requests gegen Deine API durch eine Middleware auf dem Webserver durchschleusen würdest, (dann würde der Datasnap-Server die IP des Webservers zeigen) dann könnte trotzdem jeder beliebige Angreifer die API-Endpunkte auf diesem Webserver anrufen und würde mit der IP des Webservers auf Deiner API ankommen.

Für die Absicherung von Webservices ("Zugangskontrolle"), so dass nur erlaubte Clients darauf zugreifen können, gibt es in der zwischenzeit gute und sichere Protokolle, z.B. OAuth (bzw. besser OAuth 2).

Dabei holt sich der Client (also Deine Angular-App) ein Token vom einem Security Token Server (STS). Der STS stellt sicher, dass nur valide Clients das Token bekommen. Zum Beispiel muss der Client zum einen als Referrer direkt von Deiner Webseite kommen, ein spezielles Secret vorweisen und er wird auch nur dorthin mit dem Token zurückgeschickt.

Dieses Token schickt er dann bei Requests gegen Deine API mit (z.B. im Authorization Header als Bearer Token) und deine API validiert das Token (wurde es mit dem richtigen Key vom STS signiert?) und nur wenn das der Fall ist sollte Deine API den Request beantworten.

Darlo 13. Sep 2016 14:52

AW: DataSnap: IP vom Webserver
 
Hi,

danke für Deine Ausführung! Ja, da das javascript im Browser des Clients ausgeführt bekomme ich die Client IP. Hatte gehofft dass DataSnap hier eine einfache Lösung bietet. Ok, dann werde ich mich mal einlesen.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz