Proxy für sichere ArcGIS Server Services. Sichern?

8

Für den Zugriff auf sichere Dienste (tokenbasiert oder Anmeldeinformationen) empfiehlt Esri die Verwendung von Proxy-Dateien ( Beispiel .net github ). Wenn Sie Anforderungen über den Proxy weiterleiten, können Sie sichere Dienste im Namen des Clients anfordern, ohne Ihre Anmeldeinformationen offenzulegen. Sie können eine Eigenschaft mit dem Namen definierenallowedReferers und eine Liste der verweisenden URLs zuweisen, für die der Proxy funktioniert. Grundsätzlich stellt der Proxy keine Anforderungen für verweisende URLs, die nicht definiert sind. Wenn diese Option aktiviert ist '*', wird jede verweisende Anfrage verarbeitet.

Das Problem ist; Der anfordernde Header kann von einem Hacker leicht gefälscht werden, indem lediglich eine falsche HTTP-Referer- Eigenschaft festgelegt wird. In dieser Situation können sie auf sichere Dienste zugreifen, indem sie alle ihre Anforderungen über den Proxy weiterleiten und den Referer-Header auf eine gültige Adresse setzen.

Ich suche nach Empfehlungen, wie ich dieses Problem am besten umgehen kann. Irgendwelche Empfehlungen?

jOshT
quelle
3
Gute Frage. Wir haben kürzlich auch damit experimentiert und waren traurig, dass dies wahrscheinlich weniger sicher ist als das Übergeben eines Tokens durch die Abfragezeichenfolge. Wie Sie bereits betont haben, können Sie Anfragen einfach über den Proxy weiterleiten. Wir konnten dies mit nur wenigen Zeilen Python-Code überprüfen ... Wir konnten unser gesamtes Diensteverzeichnis ohne Anmeldeinformationen durchsuchen. Zumindest wenn das Token mit der Anfrage übergeben wird, muss das Token zuerst aktiviert / abgerufen werden, was mir etwas sicherer erscheint. Ich bin auch neugierig, ob jemand gute Vorschläge hat.
Crmackey
"Esri empfiehlt ...": siehe blogs.esri.com/esri/supportcenter/2015/04/07/setting-up-a-proxy . Scheint gut, einen Vorfall dieser Empfehlungen zu zitieren.
Gischimp
Danke Gischimp. Dies ist eine gute Ressource zum Einrichten des Proxys, enthält jedoch keine Methoden zum Sichern des Problems. Ich weiß, dass Portal und ArcGIS Online beide oAuth2 haben. Ich frage mich, ob die nächste Version von ArcGIS Server dies unterstützt. Im Moment scheint @crmackey korrekt zu sein. Die sicherste Methode (zumindest für tokenbasierte Dienste) besteht darin, den Proxy nicht zu verwenden und nur ein Token an die GET-Anforderung anzuhängen.
JOTT
Erwähnenswert ist auch, dass Sie das Token mithilfe des agstokenSchlüssels zu Cookies hinzufügen können . Dies erhöht nicht die zusätzliche Sicherheit, aber zumindest wird das Token nicht in der Abfragezeichenfolge angezeigt.
Crmackey

Antworten:

1

Ich hoste den Java-Proxy in Apache Tomcat, der eine Anmeldeseite bereitstellt. Der ArcGIS-Proxy wird im selben Anwendungskontext wie die Anmeldeseite ausgeführt. Auf diese Weise erhalten meine Benutzer Zugriff mit Anmeldeinformationen, die in einer separaten, sicheren Datenbank gespeichert sind. Tomcat führt die übliche Sitzungsverwaltung durch, während der leicht geänderte ArcGIS-Proxy die verborgenen ArcGIS-Anmeldeinformationen und -Token verarbeitet. All dies erfolgt über HTTPS.

Das Ergebnis ist:

  • ArcGIS-Anmeldeinformationen werden niemals außerhalb des lokalen Intranets übertragen.
  • Benutzer können ohne eine gültige Sitzung nicht auf den Proxy zugreifen.
  • Gültige Sitzungen werden nur an Benutzer mit den richtigen Anmeldeinformationen ausgegeben.
C. David Gibson
quelle
0

Wenn Sie Anforderungen über den Proxy weiterleiten, können Sie sichere Dienste im Namen des Clients anfordern, ohne Ihre Anmeldeinformationen offenzulegen.

Ich denke, dieser Satz ist der Schlüssel. Wenn der Proxy sich beim GIS-Server authentifiziert, ist der Proxy mit Anmeldeinformationen konfiguriert? Wenn dies der Fall ist und diese Anmeldeinformationen Zugriff auf den angeforderten Kartendienst haben, scheint dies "wie beabsichtigt zu funktionieren".

Wenn der Proxy Anmeldeinformationen speichert / weitergibt, geht es dem Proxy mehr darum, Anmeldeinformationen sicher zu halten, als die Daten sicher zu halten. Stellen Sie sich eine Intranetsite eines Unternehmens vor, auf der Kartendaten eines sicheren Kartendienstes angezeigt werden.

Der anfordernde Header kann leicht von einem Hacker gefälscht werden

Bedeutet die obige Aussage, dass ein externer Angreifer Ihren Proxy direkt erreichen kann? In diesem Fall müssen Sie sich mehr Sorgen machen als um einen gefälschten HTTP-Header.

Befinden sich die Benutzer, der Proxy und der GIS-Server alle in Ihrem Netzwerk oder verwenden die Benutzer den Proxy, um eine Verbindung zu GIS-Diensten außerhalb des Netzwerks herzustellen? Wenn Sie einige Details zu Ihrer Netzwerktopologie kennen, erhalten Sie möglicherweise bessere Antworten.

Bearbeiten: Wenn Sie eine öffentliche Webanwendung haben, die Ressourcen von einem gesicherten GIS-Server in einem Netzwerk abruft, möchten Sie wahrscheinlich eher einen Reverse-Proxy als einen Forward-Proxy.

Mintx
quelle
2
Ich denke, @jOshT teilt die gleichen Bedenken wie ich, nämlich dass es anscheinend keine Möglichkeit gibt, die REST-Endpunkte vor unerwünschten Besuchern zu schützen. Ja, der Proxy verbirgt die Anmeldeinformationen, aber wenn Sie die Proxy-URL kennen, müssen Sie sich nicht einmal um Anmeldeinformationen kümmern, da Sie einfach alle Ihre Anforderungen über den Proxy weiterleiten können und die Anmeldeinformationen am Back-End übergeben werden. Ich habe dies mit ein paar Zeilen Python getestet .
Crmackey
1
Ich würde zustimmen, dass der Proxy die Anmeldeinformationen gut schützt. Wenn Sie sagen "erreichen Sie den Proxy direkt"; Ich würde irgendwie sagen. Die Anwendung ist öffentlich (wie auch der Proxy), aber jemand kann den Inhalt meines Proxys (.net) nicht "sehen". Nehmen Sie zum Beispiel ein Esri-Beispiel developer.arcgis.com/javascript/samples/ags_traffic . Hier verwenden sie einen Proxy, um auf sichere Dienste zuzugreifen. Mit den Chrome Developer Network Tools kann ich die Anforderung (cURL) einfach kopieren und über die Befehlszeile ausführen, um die Informationen abzurufen. Wie kann der Proxy selbst gesichert werden?
JOshT
@jOshT Könnten Sie Ihre Datei proxy.config einfügen und die vertraulichen Bits ausblenden? Aus Ihrem Kommentar geht jedoch hervor, dass Sie mit einem Reverse-Proxy anstelle eines Forward-Proxys möglicherweise besser dran sind.
Mintx
@Mintx Mein Proxy ist im Grunde der gleiche wie der von Esri hier: github.com/Esri/resource-proxy/tree/master/DotNet, außer dass ich AllowedReferers auf die URL für die anfordernde Anwendung festgelegt habe.
JOTT