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: