Webdienstsicherheit (WS) mit SOAP-Beispiel

โšก Intelligente Zusammenfassung

Web Service Security (WS-Security) ist ein Standard zum Schutz der Daten, die wรคhrend eines SOAP-Webdienstaufrufs ausgetauscht werden. Diese Ressource erlรคutert Sicherheitsbedrohungen und GegenmaรŸnahmen, die WS-Security-Standards, die Entwicklung eines sicheren Webdienstes mit Anmeldeinformationen sowie bewรคhrte Verfahren fรผr die Webdienstsicherheit.

  • ๐Ÿ” Kernstandard: WS-Security fรผgt SOAP eine Sicherheitsebene hinzu und definiert, wie Anmeldeinformationen und Verschlรผsselungsschlรผssel im SOAP-Header รผbertragen werden.
  • ๐ŸŒ HTTPS-Grenzwerte: HTTPS/SSL sichert den Datenverkehr von Punkt zu Punkt, aber in Mehrserver-Verbindungen gewรคhrleistet nur WS-Security den durchgรคngigen Schutz der Nachricht.
  • ๐ŸŽซ Anmeldeinformationstoken: Die Anmeldeinformationen werden mittels eines UsernameTokens fรผr Benutzername und Passwort oder eines BinarySecurityTokens fรผr Kerberos- oder X.509-Zertifikate รผbergeben.
  • ๏ธ Beispiel fรผr einen sicheren Build: Ein .NET ASMX-Webdienst fรผgt eine AuthHeader-Klasse hinzu, sodass der SOAP-Header einen Benutzernamen und ein Passwort zur Authentifizierung enthรคlt.
  • ๐Ÿ“‹ Best Practices: Prรผf- und Protokollierungsanfragen, tracBei Geschรคftsvorgรคngen mรผssen Sie sich ordnungsgemรครŸ authentifizieren und niemals sensible Zugangsdaten speichern oder protokollieren.

Webdienst WS-Sicherheit

Was ist WS-Sicherheit?

WS Security ist ein Standard, der die Sicherheit beim Datenaustausch im Rahmen eines Webdienstes regelt. Dies ist ein Schlรผsselelement von SOAP und trรคgt maรŸgeblich zu dessen Beliebtheit bei der Entwicklung von Webdiensten bei.

Sicherheit ist ein wichtiges Merkmal jeder Webanwendung. Da fast alle Webanwendungen dem Internet ausgesetzt sind, besteht immer die Gefahr einer Sicherheitsbedrohung. Daher ist es bei der Entwicklung unerlรคsslich, โ€ฆping Bei webbasierten Anwendungen wird stets empfohlen, bei der Konzeption und Entwicklung der Anwendung auf Sicherheit zu achten.

Sicherheitsbedrohungen und GegenmaรŸnahmen

Um die Sicherheitsbedrohungen zu verstehen, die einer Webanwendung schaden kรถnnen, betrachten wir ein einfaches Szenario einer Webanwendung und sehen uns an, wie diese in Bezug auf die Sicherheit funktioniert.

Eine der SicherheitsmaรŸnahmen fรผr HTTP ist das HTTPS-Protokoll. HTTPS ermรถglicht die sichere Kommunikation zwischen Client und Server รผber das Internet. Es nutzt Secure Sockets Layer (SSL) fรผr eine sichere รœbertragung. Sowohl Client als auch Server verfรผgen รผber ein digitales Zertifikat, das ihre Authentizitรคt bei jeder Kommunikation zwischen ihnen bestรคtigt.

Sicherheitsbedrohungen und GegenmaรŸnahmen HTTPS

Bei einer standardmรครŸigen HTTPS-Kommunikation zwischen Client und Server finden folgende Schritte statt:

  1. Der Client sendet รผber das Client-Zertifikat eine Anfrage an den Server. Wenn der Server das Client-Zertifikat sieht, macht er eine Notiz in seinem Cache-System, damit er weiรŸ, dass die Antwort nur an diesen Client zurรผckgehen sollte.
  2. Der Server authentifiziert sich dann gegenรผber dem Client, indem er sein Zertifikat sendet. Dadurch wird sichergestellt, dass der Client mit dem richtigen Server kommuniziert.
  3. Die gesamte nachfolgende Kommunikation zwischen Client und Server ist verschlรผsselt. Dadurch wird sichergestellt, dass andere Benutzer, die versuchen, die Sicherheit zu umgehen und an die benรถtigten Daten zu gelangen, diese nicht lesen kรถnnen, da sie verschlรผsselt sind.

Die oben beschriebene Sicherheitsmethode ist jedoch nicht in allen Situationen wirksam. Es kann vorkommen, dass ein Client mit mehreren Servern gleichzeitig kommuniziert. Das folgende Beispiel zeigt einen Client, der gleichzeitig mit einer Datenbank und einem Webserver kommuniziert. In solchen Fรคllen kรถnnen nicht alle Informationen รผber das HTTPS-Protokoll รผbertragen werden.

Sicherheitsbedrohungen und GegenmaรŸnahmen fรผr mehrere Server

Hier kommt SOAP ins Spiel, um solche Hindernisse durch die WS-Security-Spezifikation zu รผberwinden. Mit dieser Spezifikation werden alle sicherheitsrelevanten Daten im SOAP-Header-Element definiert. Das Header-Element kann die folgenden Informationen enthalten:

  1. Wenn die Nachricht im SOAP-Kรถrper mit einem Sicherheitsschlรผssel signiert wurde, kann dieser Schlรผssel im Header-Element definiert werden.
  2. Wenn ein Element innerhalb des SOAP-Bodys verschlรผsselt ist, enthรคlt der Header die notwendigen Verschlรผsselungsschlรผssel, damit die Nachricht beim Erreichen des Ziels entschlรผsselt werden kann.

In einer Umgebung mit mehreren Servern hilft die oben beschriebene SOAP-Authentifizierungstechnik folgendermaรŸen:

  • Da der SOAP-Kรถrper verschlรผsselt ist, kann er nur von dem Webserver entschlรผsselt werden, der den Webdienst hostet. Dies liegt an der Gestaltung des SOAP-Protokolls.
  • Angenommen, die Nachricht wird in einer HTTP-Anfrage an den Datenbankserver รผbermittelt; sie kann nicht entschlรผsselt werden, da die Datenbank nicht รผber die entsprechenden Mechanismen verfรผgt.
  • Erst wenn die Anfrage den Webserver tatsรคchlich รผber das SOAP-Protokoll erreicht, kann dieser die Nachricht entschlรผsseln und die entsprechende Antwort an den Client zurรผcksenden.

In den folgenden Abschnitten werden wir sehen, wie der WS-Security-Standard verwendet werden kann fรผr SOAP.

Web-Service-Sicherheitsstandards

Wie bereits erwรคhnt, basiert der WS-Security-Standard darauf, die Sicherheitsdefinition im SOAP-Header einzubetten. Die Anmeldeinformationen im SOAP-Header werden auf zwei Arten verwaltet.

Zunรคchst wird ein spezielles Element namens UsernameToken definiert. Dieses dient dazu, Benutzername und Passwort an den Webdienst zu รผbermitteln. Alternativ kann ein Binรคrtoken รผber das BinarySecurityToken verwendet werden. Dies kommt zum Einsatz, wenn Verschlรผsselungstechniken wie Kerberos oder X.509 verwendet werden.

Das folgende Diagramm veranschaulicht den Ablauf des Sicherheitsmodells in WS Security.

Workflow der Web Service Security Standards

Nachfolgend sind die einzelnen Schritte des oben beschriebenen Arbeitsablaufs aufgefรผhrt:

  1. Eine Anfrage kann vom Webdienstclient an den Sicherheitstokendienst gesendet werden. Dieser Dienst kann ein zwischengeschalteter Webdienst sein, der speziell dafรผr entwickelt wurde, Benutzernamen/Passwรถrter oder Zertifikate fรผr den eigentlichen SOAP-Webdienst bereitzustellen.
  2. Das Sicherheitstoken wird dann an den Webdienst-Client รผbergeben.
  3. AnschlieรŸend ruft der Webdienstclient den Webdienst auf, stellt diesmal aber sicher, dass das Sicherheitstoken in die SOAP-Nachricht eingebettet ist.
  4. Der Webdienst versteht dann die SOAP-Nachricht mit dem Authentifizierungstoken und kann dann den Sicherheitstokendienst kontaktieren, um zu sehen, ob der Sicherheitstoken authentisch ist oder nicht.

Der folgende Codeausschnitt zeigt das Format des Authentifizierungsteils, der Teil des WSDL-Dokuments ist. Basierend auf diesem Ausschnitt enthรคlt die SOAP-Nachricht zwei zusรคtzliche Elemente: den Benutzernamen und das Passwort.

<xs:element name="UsernameToken">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="Username"/>
         <xs:element ref="Password" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:ID"/>
   </xs:complexType>
</xs:element>

Wenn die SOAP-Nachricht tatsรคchlich zwischen Clients und Server รผbertragen wird, kรถnnte der Teil der Nachricht, der die Benutzeranmeldeinformationen enthรคlt, wie oben dargestellt aussehen. Der Elementname โ€žwsseโ€œ ist ein spezieller, fรผr SOAP definierter Elementname und bedeutet, dass er sicherheitsrelevante Informationen enthรคlt.

So erstellen Sie sichere Webdienste

Betrachten wir nun ein Beispiel fรผr die Sicherheit eines SOAP-Webdienstes. Wir werden die Sicherheit eines Webdienstes auf dem zuvor im SOAP-Kapitel gezeigten Beispiel aufbauen und eine zusรคtzliche Sicherheitsebene hinzufรผgen.

In unserem Beispiel erstellen wir einen einfachen Webdienst, der einen String an die aufrufende Anwendung zurรผckgibt. Diesmal mรผssen jedoch beim Aufruf des Webdienstes die Anmeldeinformationen an den aufrufenden Dienst รผbermittelt werden. Folgen Sie den nachstehenden Schritten, um unseren SOAP-Webdienst zu erstellen und die Sicherheitsdefinition hinzuzufรผgen.

Schritt 1) Der erste Schritt besteht darin, ein Leerzeichen zu erstellen Asp.Net Webanwendung. Klicken Sie in Visual Studio 2013 auf die Menรผoption Datei -> Neues Projekt.

Neues Projekt: Sichere Webdienste erstellen

Sobald Sie auf die Option โ€žNeues Projektโ€œ klicken, รถffnet Visual Studio ein weiteres Dialogfeld, in dem Sie den Projekttyp auswรคhlen und die erforderlichen Projektdetails eingeben kรถnnen. Dies wird im nรคchsten Schritt erlรคutert.

Schritt 2) In diesem Schritt

  1. Stellen Sie sicher, dass Sie zuerst das auswรคhlen C# Webvorlage fรผr ASP.NET-Webanwendungen. Dieses Projekt muss von diesem Typ sein, um ein Webdienstprojekt zu erstellen. Bei Auswahl dieser Option fรผhrt Visual Studio die notwendigen Schritte zum Hinzufรผgen der fรผr jede webbasierte Anwendung erforderlichen Dateien aus.
  2. Geben Sie Ihrem Projekt einen Namen, in unserem Fall โ€žwebservice.asmxGeben Sie anschlieรŸend unbedingt einen Speicherort fรผr die Projektdateien an.

Projektdetails zum Aufbau sicherer Webdienste

Nach Abschluss des Vorgangs wird die erstellte Projektdatei im Projektmappen-Explorer von Visual Studio 2013 angezeigt.

Lรถsungs-Explorer zum Erstellen sicherer Webdienste

Schritt 3) In diesem Schritt fรผgen wir unserem Projekt eine Webdienstdatei hinzu.

  1. Klicken Sie zunรคchst mit der rechten Maustaste auf die Projektdatei, wie unten dargestellt.

Sichere Webdienste erstellen (Rechtsklick-Projekt)

  1. Sobald Sie mit der rechten Maustaste auf die Projektdatei klicken, kรถnnen Sie die Option โ€žHinzufรผgen โ†’ Webdienst (ASMX)โ€œ auswรคhlen, um eine Webdienstdatei hinzuzufรผgen. Geben Sie der Webdienstdatei einfach den Namen โ€žTutorialdienstโ€œ an.

Sichere Webdienste erstellen โ€“ Webdienst hinzufรผgen

Im obigen Schritt รถffnet sich ein Dialogfeld, in dem Sie den Namen der Webdienstdatei eingeben kรถnnen. Geben Sie im folgenden Dialogfeld โ€žTutorialServiceโ€œ als Dateinamen ein.

Dialogfeld โ€žSichere Webdienste erstellenโ€œ

Schritt 4) Fรผgen Sie den folgenden Code zu Ihrer Tutorial Service-ASMX-Datei hinzu. Der folgende Codeausschnitt wird verwendet, um eine benutzerdefinierte Klasse hinzuzufรผgen, die zum ร„ndern des SOAP-Headers verwendet wird, wenn die SOAP-Nachricht generiert wird. Da wir jetzt Sicherheitsanmeldeinformationen zum SOAP-Header hinzufรผgen mรถchten, ist dieser Schritt erforderlich.

Sicheren AuthHeader-Code fรผr Webdienste erstellen

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code Erlรคuterung:

  1. Wir erstellen jetzt eine separate Klasse namens AuthHeader was vom typ ist SoapHeader-KlasseWenn Sie die im SOAP-Header รผbergebenen Daten รคndern mรถchten, mรผssen Sie eine Klasse erstellen, die die in .NET integrierte SoapHeader-Klasse verwendet. Durch die Anpassung des SOAP-Headers kรถnnen wir nun beim Aufruf des Webdienstes einen Benutzernamen und ein Passwort รผbergeben.
  2. AnschlieรŸend definieren wir die Variablen โ€žBenutzernameโ€œ und โ€žPasswortโ€œ, die vom Typ Zeichenfolge sind. Sie werden verwendet, um die Werte des Benutzernamens und des Passworts zu speichern, die an den Webdienst รผbergeben werden.

Schritt 5) Als nรคchstes muss der folgende Code in dieselbe Zeile eingefรผgt werden TutorialService.asmx-DateiDieser Code definiert die Funktion unseres Webdienstes. Diese Funktion gibt die Zeichenkette โ€žDies ist ein Guru99 Webdienstโ€œ an den Client. Diesmal wird die Zeichenkette jedoch nur zurรผckgegeben, wenn die Clientanwendung die Anmeldeinformationen an den Webdienst รผbergibt.

Tutorial zum Erstellen sicherer Webdienste: Servicecode

public class TutorialService : System.Web.Services.WebService
{
   public AuthHeader Credentials;

   [SoapHeader("Credentials")]

   [WebMethod]
   public string Guru99WebService()
   {

      if (Credentials.UserName.ToLower() != "Guru99" ||
      Credentials.Password.ToLower() != "Guru99Password")
      {
         throw new SoapException("Unauthorized",
         SoapException.ClientFaultCode);
      }
      else
      return "This is a Guru99 Web service";
   }

Code Erlรคuterung:

  1. Hier erstellen wir ein Objekt der AuthHeader-Klasse, die im vorherigen Schritt erstellt wurde. Dieses Objekt wird an unsere รผbergeben Guru99Webservice in dem Benutzername und Passwort genau รผberprรผft werden kรถnnen.
  2. Das Attribut [SoapHeader] wird nun verwendet, um festzulegen, dass beim Aufruf des Webdienstes der Benutzername und das Passwort รผbergeben werden mรผssen.
  3. In diesem Codeblock untersuchen wir den Benutzernamen und das Passwort, die beim Aufruf des Webdienstes รผbergeben werden. Wenn der Benutzername gleich โ€žGuru99โ€œ und das Passwort lautet โ€žGuru99Passwordโ€œ, dann die Meldung โ€žDies ist ein GuruDer Webdienst โ€ž99โ€œ wird an den Client รผbermittelt. Andernfalls wird eine Fehlermeldung an den Client gesendet, wenn die falsche Benutzer-ID und das falsche Passwort angegeben wurden.

Wenn der Code erfolgreich ausgefรผhrt wird, wird die folgende Ausgabe angezeigt, wenn Sie Ihren Code im Browser ausfรผhren.

Ausgang:

Ausgabe von "Sichere Webdienste erstellen"

Die obige Ausgabe wird beim Ausfรผhren des Programms angezeigt und bedeutet, dass der Webdienst nun verfรผgbar ist. Klicken wir auf den Dienst. DescriptIonenverbindung.

Beschreibung des Dienstes โ€žSichere Webdienste erstellenโ€œ

Aus der Dienstbeschreibung kรถnnen Sie nun erkennen, dass der Benutzername und das Passwort Bestandteile des sind wsdl Datei. Diese Parameter mรผssen gesendet werden, wenn der Webdienst aufgerufen wird.

Web Service Security beste Praktiken

Im Folgenden sind die Sicherheitsaspekte aufgefรผhrt, die bei der Arbeit mit Webdiensten beachtet werden sollten:

  1. Audit- und Protokollverwaltung โ€“ Verwenden Sie die Anwendungsprotokollierung, um alle Anfragen an die Webdienste zu protokollieren. Dies liefert einen detaillierten Bericht darรผber, wer den Webdienst aufgerufen hat, und kann bei der Folgenabschรคtzung im Falle einer Sicherheitsverletzung hilfreich sein.
  2. Ablauf der Aufrufe an den Webdienst Versuchen Sie, den Ablauf der Aufrufe von Webdiensten zu verfolgen. StandardmรครŸig kann eine Anwendung mehrere Webdienstanfragen mit Authentifizierungstoken zwischen diesen Webdiensten senden. Alle Aufrufe zwischen Webdiensten mรผssen รผberwacht und protokolliert werden.
  3. Heikle Informationen โ€“ Fรผgen Sie in Ihren Protokolleintrรคgen keine sensiblen Informationen wie Passwรถrter, Kreditkartennummern oder andere vertrauliche Daten hinzu. Sollte ein Ereignis solche Informationen enthalten, muss es vor der Protokollierung verworfen werden.
  4. Track Business Operations - Track wichtige Geschรคftsvorgรคnge. Instrumentieren Sie Ihre Anwendung beispielsweise so, dass der Zugriff auf besonders sensible Methoden und Geschรคftslogik protokolliert wird. Nehmen wir als Beispiel einen Online-Shop.ping Anwendung. Eine typische Anwendung umfasst mehrere Schritte, wie die Auswahl der zu kaufenden Artikel, das Hinzufรผgen der Artikel zum Warenkorb und schlieรŸlich den Kaufvorgang. Dieser gesamte Geschรคftsprozess muss optimiert werden. tracvom Webdienst gestartet.
  5. OrdnungsgemรครŸe Authentifizierung Die Authentifizierung ist der Mechanismus, mit dem Clients ihre Identitรคt gegenรผber dem Webdienst mithilfe bestimmter Anmeldeinformationen nachweisen kรถnnen. Benutzeranmeldeinformationen dรผrfen niemals gespeichert werden. Daher ist zu beachten, dass bei Verwendung von WS Security zum Aufruf des Webdienstes die im SOAP-Header gesendeten Anmeldeinformationen nicht gespeichert, sondern verworfen werden mรผssen.

Hรคufig gestellte Fragen

KI kann den Webdienstverkehr in Echtzeit รผberwachen, ungewรถhnliche Anfragemuster erkennen und potenzielle Angriffe wie Code-Injection oder Token-Missbrauch kennzeichnen. Sie kann auรŸerdem WSDL- und SOAP-Konfigurationen auf schwache Authentifizierung oder fehlende Verschlรผsselung รผberprรผfen.

Ja. Maschinelle Lernmodelle, die mit normalem Datenverkehr trainiert wurden, kรถnnen Anomalien wie Credential Stuffing, fehlerhafte SOAP-Header oder Replay-Angriffe erkennen. Sicherheitsteams sollten Warnmeldungen dennoch prรผfen, bevor sie Anfragen blockieren, um legitime Clients nicht zu beeintrรคchtigen.

HTTPS verschlรผsselt die Verbindung zwischen zwei Punkten, sodass Daten offengelegt werden, sobald sie einen zwischengeschalteten Server erreichen. WS-Security sichert die SOAP-Nachricht selbst und schรผtzt sie vor unbefugtem Zugriff.ping Es bietet durchgรคngigen Schutz, selbst wenn die Daten รผber mehrere Server geleitet werden.

Ein UsernameToken ist ein WS-Security-Element im SOAP-Header, das einen Benutzernamen und optional ein Passwort enthรคlt. Es ermรถglicht einem Webdienst, den Aufrufer vor der Verarbeitung der Anfrage zu authentifizieren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: