Webszolgáltatás (WS) biztonság SOAP példával

⚡ Okos összefoglaló

A webszolgáltatás-biztonság (WS) egy olyan szabvány, amely védi a SOAP webszolgáltatás-hívások során kicserélt adatokat. Ez az anyag ismerteti a biztonsági fenyegetéseket és ellenintézkedéseket, a WS-biztonsági szabványokat, a biztonságos webszolgáltatás hitelesítő adatokkal történő felépítését, valamint a webszolgáltatás-biztonsággal kapcsolatos legjobb gyakorlatokat.

  • 🔐 Alapvető szabvány: A WS-Security egy biztonsági réteget ad a SOAP-hoz, meghatározva, hogyan haladnak a hitelesítő adatok és a titkosítási kulcsok a SOAP fejlécben.
  • 🌐 HTTPS-korlátok: A HTTPS/SSL biztosítja a pont-pont forgalmat, de több szervert érintő folyamatokban csak a WS-Security biztosítja az üzenetek teljes körű védelmét.
  • 🎫 Hitelesítő tokenek: A hitelesítő adatok átadása UsernameToken segítségével történik felhasználónév és jelszó esetén, illetve BinarySecurityToken használatával Kerberos vagy X.509 tanúsítványok esetén.
  • 🇧🇷 Biztonságos felépítési példa: Egy .Net ASMX webszolgáltatás hozzáad egy AuthHeader osztályt, így a SOAP fejléc tartalmazza a felhasználónevet és a jelszót a hitelesítéshez.
  • 📋 Legjobb Gyakorlatok: Audit- és naplókérések, tracüzleti műveletekhez, hitelesítse magát megfelelően, és soha ne tároljon vagy naplózzon bizalmas hitelesítő adatokat.

Webszolgáltatás WS biztonság

Mi az a WS Security?

A WS Security egy olyan szabvány, amely a webszolgáltatások részeként cserélt adatok biztonságát célozza. Ez a SOAP egyik kulcsfontosságú funkciója, amely nagyon népszerűvé teszi a webszolgáltatások létrehozásában.

A biztonság minden webes alkalmazás fontos jellemzője. Mivel szinte minden webes alkalmazás ki van téve az internetnek, mindig fennáll a biztonsági fenyegetés lehetősége a webes alkalmazásokat illetően. Ezért fejlesztéskorping webalapú alkalmazások esetében mindig ajánlott gondoskodni arról, hogy az alkalmazást a biztonság szem előtt tartásával tervezzék és fejlesszék.

Biztonsági veszélyek és ellenintézkedések

A webes alkalmazásokat fenyegető biztonsági fenyegetések megértéséhez nézzünk meg egy egyszerű webes alkalmazás-forgatókönyvet, és nézzük meg, hogyan működik biztonsági szempontból.

A HTTP egyik biztonsági intézkedése a HTTPS protokoll. A HTTPS a kliens és a szerver közötti biztonságos kommunikációs mód az interneten keresztül. A HTTPS a Secure Sockets Layer, vagyis az SSL titkosítást használja a biztonságos kommunikációhoz. Mind a kliens, mind a szerver rendelkezik egy digitális tanúsítvánnyal, amely igazolja valódiságát, amikor bármilyen kommunikáció történik a kliens és a szerver között.

Biztonsági fenyegetések és ellenintézkedések a HTTPS-sel kapcsolatban

Egy szabványos HTTPS kommunikáció során a kliens és a szerver között a következő lépések történnek:

  1. A kliens kérést küld a szervernek az ügyféltanúsítványon keresztül. Amikor a kiszolgáló meglátja az ügyféltanúsítványt, feljegyzést készít a gyorsítótár-rendszerébe, hogy tudja, hogy a válasznak csak ehhez az ügyfélhez kell visszatérnie.
  2. A szerver ezután hitelesíti magát a kliens számára a tanúsítvány elküldésével. Ez biztosítja, hogy az ügyfél a megfelelő szerverrel kommunikáljon.
  3. Ezt követően az összes kommunikáció a kliens és a szerver között titkosítva van. Ez biztosítja, hogy ha bármely más felhasználó megpróbálja feltörni a biztonságot és megszerezni a szükséges adatokat, akkor nem tudja elolvasni azokat, mivel azok titkosítva vannak.

De a fenti biztonsági fajta nem minden helyzetben fog működni. Eljöhet az idő, amikor a kliens több szerverrel is kommunikálhat. Az alábbi példa egy olyan klienst mutat be, amely egyszerre egy adatbázissal és egy webszerverrel is kommunikál. Ilyen esetekben nem minden információ haladhat át a HTTPS protokollon.

Biztonsági fenyegetések és ellenintézkedések több szerveren

Itt jön képbe a SOAP, hogy leküzdje ezeket az akadályokat a WS Security specifikációjának bevezetésével. Ezzel a specifikációval minden biztonsággal kapcsolatos adat a SOAP header elemében van definiálva. A header elem az alábbi információkat tartalmazhatja:

  1. Ha a SOAP törzsén belüli üzenetet bármilyen biztonsági kulccsal aláírták, akkor az a kulcs a fejléc elemben definiálható.
  2. Ha a SOAP törzs bármely eleme titkosított, a fejléc tartalmazza a szükséges titkosítási kulcsokat, hogy az üzenet visszafejthető legyen, amikor eléri a célállomást.

Többszerveres környezetben a fenti SOAP hitelesítési technika a következőképpen segít:

  • Mivel a SOAP törzse titkosított, csak a webszolgáltatást üzemeltető webszerver tudja visszafejteni. Ez a SOAP protokoll kialakításának köszönhető.
  • Tegyük fel, hogy az üzenet HTTP kérésben kerül átadásra az adatbázis-kiszolgálónak; nem lehet visszafejteni, mert az adatbázis nem rendelkezik a megfelelő mechanizmusokkal ehhez.
  • Csak akkor lesz képes megfejteni az üzenetet, és a megfelelő választ visszaküldeni a kliensnek, ha a kérés ténylegesen eléri a webkiszolgálót SOAP protokollként.

A következő témákban látni fogjuk, hogyan használható a WS Security szabvány a következőkre: SOAP.

Webszolgáltatás biztonsági szabványai

Amint azt a korábbi szakaszban tárgyaltuk, a WS-Security szabvány a SOAP fejlécben szereplő biztonsági definícióra épül. A SOAP fejlécben található hitelesítő adatokat kétféleképpen kezelik.

Először is, definiál egy speciális elemet, a UsernameToken-t. Ezzel jut el a felhasználónév és a jelszó a webszolgáltatáshoz. A másik módszer egy bináris token használata a BinarySecurityTokenen keresztül. Ezt olyan helyzetekben használják, amikor titkosítási technikákat, például Kerberost vagy X.509-et használnak.

Az alábbi ábra a biztonsági modell működését mutatja be a WS Security rendszerben.

Webszolgáltatás-biztonsági szabványok munkafolyamata

Az alábbiakban a fenti munkafolyamatban végrehajtandó lépések láthatók:

  1. A webszolgáltatás kliense küldhet egy kérést a biztonsági token szolgáltatásnak. Ez a szolgáltatás lehet egy köztes webszolgáltatás, amelyet kifejezetten arra terveztek, hogy felhasználóneveket/jelszavakat vagy tanúsítványokat biztosítson a tényleges SOAP webszolgáltatás számára.
  2. A biztonsági tokent ezután átadja a webszolgáltatási ügyfélnek.
  3. A webszolgáltatás kliens ezután meghívja a webszolgáltatást, de ezúttal gondoskodik arról, hogy a biztonsági token be legyen ágyazva a SOAP üzenetbe.
  4. A webszolgáltatás ezután megérti a SOAP-üzenetet a hitelesítési jogkivonattal, majd kapcsolatba léphet a biztonsági token szolgáltatással, hogy ellenőrizze, hogy a biztonsági token hiteles-e vagy sem.

Az alábbi kódrészlet a WSDL dokumentum hitelesítési részének formátumát mutatja. Az alábbi kódrészlet alapján a SOAP üzenet 2 további elemet fog tartalmazni, az egyik a felhasználónév, a másik a jelszó.

<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>

Amikor a SOAP üzenet ténylegesen átkerül a kliensek és a szerver között, az üzenet felhasználói hitelesítő adatokat tartalmazó része a fent láthatóhoz hasonlóan nézhet ki. A wsse elemnév egy speciális, a SOAP számára definiált elemnév, és azt jelenti, hogy biztonságalapú információkat tartalmaz.

Hogyan építsünk fel biztonságos webszolgáltatásokat

Most nézzünk egy SOAP webszolgáltatás biztonsági példát. A SOAP fejezetben korábban bemutatott példára építünk egy webszolgáltatás biztonságot, és hozzáadunk egy biztonsági réteget.

Példánkban egy egyszerű webszolgáltatást fogunk létrehozni, amely egy karakterláncot ad vissza a webszolgáltatást hívó alkalmazásnak. De ezúttal, amikor a webszolgáltatást meghívjuk, meg kell adni a hitelesítő adatokat a hívó szolgáltatásnak. Kövessük az alábbi lépéseket a SOAP webszolgáltatás létrehozásához és a biztonsági definíció hozzáadásához.

Step 1) Az első lépés egy üres létrehozása Asp.Net Webes alkalmazás. A Visual Studio 2013-ban kattintson a Fájl->Új projekt menüpontra.

Új biztonságos webszolgáltatások létrehozása

Miután rákattint az Új projekt lehetőségre, a Visual Studio egy másik párbeszédablakot ad a projekt típusának kiválasztásához és a projekt szükséges részleteinek megadásához. Ezt a következő lépésben ismertetjük.

Step 2) Ebben a lépésben a

  1. Győződjön meg arról, hogy először a C# webes sablon ASP.NET webes alkalmazáshoz. A projektnek ilyen típusúnak kell lennie ahhoz, hogy webszolgáltatás-projektet hozhasson létre. Ennek a lehetőségnek a kiválasztásával a Visual Studio elvégzi a szükséges lépéseket a webes alkalmazásokhoz szükséges fájlok hozzáadásához.
  2. Adjon nevet a projektjének, amelyet esetünkben a következőképpen adtunk:webszolgáltatás.asmx.” Ezután ügyeljen arra, hogy megadja a projektfájlok tárolására szolgáló helyet.

Biztonságos webszolgáltatások létrehozása projekt részletei

Ha kész, a létrehozott projektfájl a Visual Studio 2013 megoldáskezelőjében jelenik meg.

Biztonságos webszolgáltatások megoldásböngészőjének létrehozása

Step 3) Ebben a lépésben egy webszolgáltatás-fájlt fogunk hozzáadni a projektünkhöz.

  1. Először kattintson jobb gombbal a projektfájlra az alábbiak szerint.

Biztonságos webszolgáltatások létrehozása jobb gombbal a projekthez

  1. Miután jobb gombbal kattintott a projektfájlra, kiválaszthatja a „Hozzáadás->Webszolgáltatás (ASMX)” lehetőséget egy webszolgáltatásfájl hozzáadásához. Ehhez adjon meg egy „Oktatóanyag szolgáltatás” nevet a webszolgáltatásfájl névének.

Biztonságos webszolgáltatások létrehozása webszolgáltatás hozzáadása

A fenti lépés egy párbeszédpanelt jelenít meg, ahol megadhatja a webszolgáltatásfájl nevét. Az alábbi párbeszédpanelen írja be a TutorialService nevet fájlnévként.

Biztonságos webszolgáltatások név párbeszédpanelének létrehozása

Step 4) Adja hozzá a következő kódot a Tutorial Service asmx fájljához. Az alábbi kódrészlet egy egyéni osztály hozzáadására szolgál, amely a SOAP fejléc megváltoztatására szolgál a SOAP üzenet generálásakor. Mivel most biztonsági hitelesítő adatokat szeretnénk hozzáadni a SOAP fejléchez, ez a lépés szükséges.

Biztonságos webszolgáltatások AuthHeader kódjának létrehozása

      return "This is a Guru99 Web Service";
   }

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

Code Magyarázat:

  1. Most egy külön osztályt hozunk létre, melynek neve AuthHeader amely típusú SoapHeader osztályAmikor módosítani szeretnéd a SOAP fejlécben átadott adatokat, létre kell hozni egy olyan osztályt, amely a .Net beépített SoapHeader osztályát használja. A SOAP fejléc testreszabásával mostantól lehetőségünk van „Felhasználónév” és „Jelszó” átadására a webszolgáltatás meghívásakor.
  2. Ezután meghatározzuk a „Felhasználónév” és „Jelszó” változóit, amelyek karakterlánc típusúak. Ezek a felhasználónév és a jelszó értékeinek tárolására szolgálnak, amelyeket átadnak a webszolgáltatásnak.

Step 5) Következő lépésként a következő kódot kell hozzáadni ugyanahhoz TutorialService.asmx fájlEz a kód valójában a webszolgáltatásunk függvényét definiálja. Ez a függvény egy karakterláncot ad vissza: „Ez egy Guru99 Web service” üzenetet küld a kliensnek. Ezúttal azonban a karakterlánc csak akkor kerül visszaadásra, ha a kliensalkalmazás átadja a hitelesítő adatokat a webszolgáltatásnak.

Biztonságos webszolgáltatások építése útmutatóSzolgáltatáskód

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 Magyarázat:

  1. Itt az előző lépésben létrehozott AuthHeader osztály objektumát hozzuk létre. Ezt az objektumot átadjuk nekünk Guru99Webszolgáltatás amelyben a felhasználónév és a jelszó alaposan megvizsgálható.
  2. A [SoapHeader] attribútum most annak megadására szolgál, hogy a webszolgáltatás meghívásakor át kell adnia a felhasználónevet és a jelszót.
  3. Ebben a kódblokkban valójában a webszolgáltatás meghívásakor átadott felhasználónevet és jelszót vizsgáljuk. Ha a felhasználónév egyenlő „Guru99”, és a jelszó egyenlő a következővel: „Guru„99Jelszó”, majd a „Ez egy Guru99 Web service” üzenetet adják át a kliensnek. Ellenkező esetben hibaüzenetet kap a kliens, ha helytelen felhasználói azonosítót és jelszót adnak meg.

Ha a kód sikeresen lefut, a következő kimenet jelenik meg, amikor futtatja a kódot a böngészőben.

output:

Biztonságos webszolgáltatások kimenetének létrehozása

A fenti kimenet jelenik meg a program futtatásakor, ami azt jelenti, hogy a webszolgáltatás most már elérhető. Kattintson a Szolgáltatásra Description link.

Biztonságos webszolgáltatások létrehozása szolgáltatásleírás

A szolgáltatás leírásából most láthatja, hogy a felhasználónév és a jelszó a wsdl fájlt. Ezeket a paramétereket a webszolgáltatás meghívásakor kell elküldeni.

Webszolgáltatás biztonságának bevált gyakorlatai

A webszolgáltatásokkal való munka során figyelembe kell venni a következő biztonsági szempontokat:

  1. Auditálás és naplókezelés – Alkalmazásnaplózás segítségével naplózhatja a webszolgáltatásokhoz érkező összes kérést. Ez részletes jelentést nyújt arról, hogy ki hívta meg a webszolgáltatást, és segíthet a hatáselemzésben, ha bármilyen biztonsági rés történik.
  2. A webszolgáltatáshoz irányuló hívások folyamata – Próbáld megfigyelni a webszolgáltatások hívásának folyamatát. Alapértelmezés szerint egy alkalmazás több webszolgáltatás-kérést is meghívhat, amelyek között hitelesítési tokenek kerülnek átadásra. A webszolgáltatások közötti összes hívást monitorozni és naplózni kell.
  3. Érzékeny információ – Ne adjon meg bizalmas információkat a naplóbejegyzéseiben, például jelszavakat, hitelkártyaszámokat vagy más bizalmas információkat. Ha van egy esemény, amely ilyen információkat tartalmaz, azt a naplózás előtt el kell távolítani.
  4. Track Üzlet OperaTIONS - Tracjelentős üzleti műveletek. Például, az alkalmazásod eszközeivel rögzítheted a különösen érzékeny módszerekhez és üzleti logikához való hozzáférést. Vegyünk például egy online áruházat.ping alkalmazás. Egy tipikus alkalmazás több lépésből áll, például a megvásárolni kívánt tételek kiválasztása, a kosárba helyezett tételek, majd a végső vásárlás. Ezt a teljes üzleti munkafolyamatot traca webszolgáltatás által kezelve.
  5. Megfelelő hitelesítés – A hitelesítés az a mechanizmus, amelynek segítségével a kliensek azonosíthatják magukat a webszolgáltatással egy bizonyos hitelesítő adatkészlet segítségével, amelyek bizonyítják ezt a személyazonosságot. Soha nem szabad tárolni a felhasználói hitelesítő adatokat, ezért ha a WS Security-t használják a webszolgáltatás meghívására, meg kell jegyezni, hogy a webszolgáltatásnak nem szabad tárolnia a SOAP fejlécben küldött hitelesítő adatokat. Ezeket a webszolgáltatásnak el kell dobnia.

GYIK

A mesterséges intelligencia valós időben képes figyelni a webszolgáltatások forgalmát, észlelni a szokatlan kérési mintákat, és megjelölni a valószínűsíthető támadásokat, például az injektálást vagy a tokenekkel való visszaélést. Emellett képes a WSDL és SOAP konfigurációk vizsgálatára is gyenge hitelesítés vagy hiányzó titkosítás szempontjából.

Igen. A normál forgalomban betanított gépi tanulási modellek képesek észlelni az olyan rendellenességeket, mint a hitelesítő adatok beillesztése, a helytelenül formázott SOAP fejlécek vagy a visszajátszási támadások. A biztonsági csapatoknak továbbra is ellenőrizniük kell a riasztásokat a kérések blokkolása előtt, hogy elkerüljék a jogos ügyfelek zavarását.

A HTTPS titkosítja a két pont közötti kapcsolatot, így az adatok akkor válnak elérhetővé, amikor elérik a köztes szervert. A WS-Security magát a SOAP üzenetet védi,ping Végponttól végig védett, még akkor is, ha több szerveren haladt át.

A UsernameToken egy WS-Security elem, amely a SOAP fejlécben található, és egy felhasználónevet, valamint opcionálisan egy jelszót tartalmaz. Lehetővé teszi a webszolgáltatás számára, hogy hitelesítse a hívót a kérés feldolgozása előtt.

Foglald össze ezt a bejegyzést a következőképpen: