Primjer sigurnosti web servisa (WS) s SOAP protokolom

โšก Pametni saลพetak

Sigurnost web servisa (WS) je standard koji ลกtiti podatke razmijenjene tijekom poziva SOAP web servisa. Ovaj resurs objaลกnjava sigurnosne prijetnje i protumjere, standarde WS-Security, izgradnju sigurne web servisa s vjerodajnicama i najbolje prakse sigurnosti web servisa.

  • ๐Ÿ” Osnovni standard: WS-Security dodaje sigurnosni sloj SOAP-u, definirajuฤ‡i kako se vjerodajnice i kljuฤevi za ลกifriranje prenose unutar SOAP zaglavlja.
  • ๐ŸŒ HTTPS ograniฤenja: HTTPS/SSL osigurava promet od toฤke do toฤke, ali u tokovima s viลกe posluลพitelja samo WS-Security ลกtiti poruku od poฤetka do kraja.
  • ๐ŸŽซ Tokeni vjerodajnica: Vjerodajnice se prosljeฤ‘uju pomoฤ‡u UsernameTokena za korisniฤko ime i lozinku ili BinarySecurityTokena za Kerberos ili X.509 certifikate.
  • ๐Ÿ› ๏ธ Primjer sigurne izgradnje: .Net ASMX web servis dodaje klasu AuthHeader tako da SOAP zaglavlje sadrลพi korisniฤko ime i lozinku za autentifikaciju.
  • ๐Ÿ“‹ Najbolje prakse: Zahtjevi za reviziju i zapisivanje, track poslovnim operacijama, ispravno se autentificirajte i nikada ne pohranjujte niti zapisujte osjetljive vjerodajnice.

Sigurnost web servisa WS

ล to je WS Security?

WS Security je standard koji se bavi sigurnoลกฤ‡u prilikom razmjene podataka kao dijela web servisa. Ovo je kljuฤna znaฤajka SOAP-a koja ga ฤini vrlo popularnim za stvaranje web servisa.

Sigurnost je vaลพna znaฤajka svake web aplikacije. Buduฤ‡i da su gotovo sve web aplikacije izloลพene internetu, uvijek postoji moguฤ‡nost sigurnosne prijetnje web aplikacijama. Stoga, prilikom razvojaping web-baziranih aplikacija, uvijek se preporuฤuje osigurati da je aplikacija dizajnirana i razvijena imajuฤ‡i na umu sigurnost.

Sigurnosne prijetnje i protumjere

Kako bismo razumjeli sigurnosne prijetnje koje mogu biti neprijateljske prema web aplikaciji, pogledajmo jednostavan scenarij web aplikacije i vidimo kako ona funkcionira u smislu sigurnosti.

Jedna od sigurnosnih mjera dostupnih za HTTP je HTTPS protokol. HTTPS je siguran naฤin komunikacije izmeฤ‘u klijenta i posluลพitelja putem weba. HTTPS koristi Secure Sockets Layer ili SSL za sigurnu komunikaciju. I klijent i posluลพitelj imat ฤ‡e digitalni certifikat kojim se identificiraju kao autentiฤni kada se dogodi bilo kakva komunikacija izmeฤ‘u klijenta i posluลพitelja.

Sigurnosne prijetnje i protumjere HTTPS

U standardnoj HTTPS komunikaciji izmeฤ‘u klijenta i posluลพitelja odvijaju se sljedeฤ‡i koraci:

  1. Klijent ลกalje zahtjev posluลพitelju putem certifikata klijenta. Kada posluลพitelj vidi certifikat klijenta, zapisuje biljeลกku u svom sustavu predmemorije tako da zna da se odgovor treba vratiti samo ovom klijentu.
  2. Posluลพitelj se zatim autentificira klijentu slanjem svojeg certifikata. Ovo osigurava da klijent komunicira s pravim posluลพiteljem.
  3. Sva komunikacija izmeฤ‘u klijenta i posluลพitelja nakon toga je ลกifrirana. To osigurava da ako bilo koji drugi korisnik pokuลกa probiti sigurnost i dobiti potrebne podatke, neฤ‡e ih moฤ‡i proฤitati jer ฤ‡e biti ลกifrirani.

Ali gore navedena vrsta sigurnosti neฤ‡e funkcionirati u svim situacijama. Moลพe doฤ‡i vrijeme kada klijent moลพe komunicirati s viลกe posluลพitelja. Primjer u nastavku pokazuje klijenta koji istovremeno komunicira i s bazom podataka i s web posluลพiteljem. U takvim sluฤajevima, ne mogu sve informacije proฤ‡i putem HTTPS protokola.

Sigurnosne prijetnje i protumjere za viลกe posluลพitelja

Ovdje SOAP stupa na scenu kako bi prevladao takve prepreke koriลกtenjem WS Security specifikacije. S ovom specifikacijom, svi podaci vezani uz sigurnost definirani su u SOAP elementu zaglavlja. Element zaglavlja moลพe sadrลพavati sljedeฤ‡e informacije:

  1. Ako je poruka unutar tijela SOAP-a potpisana bilo kojim sigurnosnim kljuฤem, taj se kljuฤ moลพe definirati u elementu zaglavlja.
  2. Ako je bilo koji element unutar SOAP tijela ลกifriran, zaglavlje bi sadrลพavalo potrebne kljuฤeve za ลกifriranje kako bi se poruka mogla deลกifrirati kada stigne do odrediลกta.

U okruลพenju s viลกe posluลพitelja, gore navedena tehnika SOAP autentifikacije pomaลพe na sljedeฤ‡i naฤin:

  • Buduฤ‡i da je tijelo SOAP-a ลกifrirano, moฤ‡i ฤ‡e ga deลกifrirati samo web posluลพitelj koji hostira web uslugu. To je zbog naฤina na koji je SOAP protokol dizajniran.
  • Pretpostavimo da se poruka prosljeฤ‘uje posluลพitelju baze podataka u HTTP zahtjevu; ne moลพe se deลกifrirati jer baza podataka nema odgovarajuฤ‡e mehanizme za to.
  • Tek kada zahtjev stvarno stigne do web posluลพitelja kao SOAP protokol, on ฤ‡e moฤ‡i deลกifrirati poruku i poslati odgovarajuฤ‡i odgovor natrag klijentu.

U sljedeฤ‡im temama vidjet ฤ‡emo kako se WS Security standard moลพe koristiti za SOAP.

Sigurnosni standardi web usluga

Kao ลกto je spomenuto u prethodnom odjeljku, WS-Security standard se vrti oko ukljuฤivanja sigurnosne definicije u SOAP zaglavlje. Vjerodajnice u SOAP zaglavlju se upravljaju na 2 naฤina.

Prvo, definira poseban element pod nazivom UsernameToken. Koristi se za prosljeฤ‘ivanje korisniฤkog imena i lozinke web servisu. Drugi naฤin je koriลกtenje binarnog tokena putem BinarySecurityTokena. Koristi se u situacijama u kojima se koriste tehnike ลกifriranja poput Kerberosa ili X.509.

Donji dijagram prikazuje tijek rada sigurnosnog modela u WS Securityju.

Tijek rada standarda sigurnosti web usluga

U nastavku su navedeni koraci koji se odvijaju u gore navedenom tijeku rada:

  1. Zahtjev se moลพe poslati s web servisa na Security Token Service. Ovaj servis moลพe biti posredniฤki web servis koji je posebno izgraฤ‘en za pruลพanje korisniฤkih imena/lozinki ili certifikata stvarnom SOAP web servisu.
  2. Sigurnosni token zatim se prosljeฤ‘uje klijentu web usluge.
  3. Klijent web servisa zatim poziva web servis, ali ovaj put osiguravajuฤ‡i da je sigurnosni token ugraฤ‘en u SOAP poruku.
  4. Web usluga tada razumije SOAP poruku s tokenom za provjeru autentiฤnosti i zatim moลพe kontaktirati uslugu Sigurnosni token da vidi je li sigurnosni token autentiฤan ili ne.

Donji isjeฤak prikazuje format dijela za autentifikaciju koji je dio WSDL dokumenta. Na temelju donjeg isjeฤka, SOAP poruka ฤ‡e sadrลพavati 2 dodatna elementa, jedan je korisniฤko ime, a drugi lozinka.

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

Kada se SOAP poruka zapravo prenosi izmeฤ‘u klijenata i posluลพitelja, dio poruke koji sadrลพi korisniฤke vjerodajnice mogao bi izgledati kao ลกto je prikazano gore. Naziv elementa wsse je poseban naziv elementa definiran za SOAP i znaฤi da sadrลพi sigurnosne informacije.

Kako izgraditi sigurne web usluge

Sada pogledajmo primjer sigurnosti SOAP web servisa. Izgradit ฤ‡emo sigurnost web servisa na primjeru prikazanom ranije u SOAP poglavlju i dodati mu sigurnosni sloj.

U naลกem primjeru, izradit ฤ‡emo jednostavnu web uslugu koja ฤ‡e se koristiti za vraฤ‡anje niza znakova aplikaciji koja poziva web uslugu. Ali ovaj put, kada se web usluga pozove, pozivajuฤ‡oj usluzi potrebno je dostaviti vjerodajnice. Slijedimo dolje navedene korake za izradu naลกe SOAP web usluge i dodavanje sigurnosne definicije.

Korak 1) Prvi korak je stvaranje praznog Asp.Net Web aplikacija. U Visual Studio 2013 kliknite na opciju izbornika Datoteka->Novi projekt.

Izgradite novi projekt sigurnih web usluga

Nakon ลกto kliknete opciju Novi projekt, Visual Studio ฤ‡e vam dati joลก jedan dijaloลกki okvir za odabir vrste projekta i davanje potrebnih pojedinosti o projektu. Ovo je objaลกnjeno u sljedeฤ‡em koraku.

Korak 2) U ovom koraku

  1. Uvjerite se da prvo odaberete C# web predloลพak za ASP.NET web aplikaciju. Projekt mora biti ovog tipa kako bi se stvorio projekt web usluga. Odabirom ove opcije, Visual Studio ฤ‡e zatim izvrลกiti potrebne korake za dodavanje potrebnih datoteka koje su potrebne bilo kojoj web-aplikaciji.
  2. Dajte naziv svom projektu koji je u naลกem sluฤaju dat kao "webservice.asmx.โ€ Zatim obavezno navedite lokaciju gdje ฤ‡e se pohraniti datoteke projekta.

Detalji projekta Izrada sigurnih web usluga

Nakon ลกto zavrลกite, vidjet ฤ‡ete stvorenu datoteku projekta u vaลกem istraลพivaฤu rjeลกenja u Visual Studiju 2013.

Izradi istraลพivaฤ rjeลกenja za sigurne web usluge

Korak 3) U ovom koraku ฤ‡emo naลกem projektu dodati datoteku web servisa.

  1. Prvo, desnom tipkom miลกa kliknite datoteku projekta kao ลกto je prikazano dolje.

Izradi sigurne web usluge - klikni projekt desnom tipkom miลกa

  1. Nakon ลกto desnom tipkom miลกa kliknete na datoteku projekta, imate moguฤ‡nost odabrati opciju "Dodaj->Web servis (ASMX)" za dodavanje datoteke web servisa. Samo unesite naziv Tutorial Service za datoteku naziva web servisa.

Izgradite sigurne web usluge, dodajte web uslugu

Gornji korak ฤ‡e pokrenuti dijaloลกki okvir u koji se moลพe unijeti naziv datoteke web servisa. Stoga u donjem dijaloลกkom okviru unesite naziv TutorialService kao naziv datoteke.

Dijalog za naziv Izradi sigurnih web servisa

Korak 4) Dodajte sljedeฤ‡i kod svojoj asmx datoteci Tutorial Service. Donji isjeฤak koda koristi se za dodavanje prilagoฤ‘ene klase koja ฤ‡e se koristiti za promjenu SOAP zaglavlja kada se generira SOAP poruka. Buduฤ‡i da sada ลพelimo dodati sigurnosne vjerodajnice u SOAP zaglavlje, ovaj je korak obavezan.

Izradi kod za autentifikaciju sigurnih web usluga

      return "This is a Guru99 Web Service";
   }

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

Code Objaลกnjenje:

  1. Sada stvaramo zasebnu klasu pod nazivom AuthHeader koji je tipa Klasa SoapHeaderKad god ลพelite promijeniti ลกto se prenosi u SOAP zaglavlju, potrebno je stvoriti klasu koja koristi ugraฤ‘enu klasu SoapHeader iz .Neta. Prilagoฤ‘avanjem SOAP zaglavlja sada imamo moguฤ‡nost prosljeฤ‘ivanja 'Korisniฤkog imena' i 'Lozinke' kada se pozove web usluga.
  2. Zatim definiramo varijable 'UserName' i 'Password' koje su tipa string. Oni ฤ‡e se koristiti za ฤuvanje vrijednosti korisniฤkog imena i lozinke koje se prosljeฤ‘uju web servisu.

Korak 5) Kao sljedeฤ‡i korak, potrebno je istom dodati sljedeฤ‡i kod Datoteka TutorialService.asmxOvaj kod zapravo definira funkciju naลกe web usluge. Ova funkcija vraฤ‡a niz znakova โ€žOvo je Guru99 Web servisโ€ klijentu. Ali ovaj put, niz ฤ‡e se vratiti samo ako klijentska aplikacija proslijedi vjerodajnice web servisu.

Vodiฤ za izradu sigurnih web servisa kod servisa

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 Objaลกnjenje:

  1. Ovdje stvaramo objekt klase AuthHeader koji je stvoren u prethodnom koraku. Ovaj objekt ฤ‡e biti proslijeฤ‘en naลกem Guru99Webservice u kojem se korisniฤko ime i lozinka mogu pomno ispitati.
  2. Atribut [SoapHeader] sada se koristi kako bi se specificiralo da kada se pozove web usluga, treba proslijediti korisniฤko ime i lozinku.
  3. U ovom bloku koda zapravo ispitujemo korisniฤko ime i lozinku koji se prosljeฤ‘uju prilikom pozivanja web servisa. Ako je korisniฤko ime jednako "Guru99โ€ i lozinka je jednaka โ€œGuru99Passwordโ€, zatim poruka โ€œOvo je GuruKlijentu se prosljeฤ‘uje "99 Web service". Inaฤe ฤ‡e se klijentu poslati greลกka ako se prosljeฤ‘uju pogreลกan korisniฤki ID i lozinka.

Ako se kรดd uspjeลกno izvrลกi, sljedeฤ‡i ฤ‡e se izlaz prikazati kada pokrenete kรดd u pregledniku.

Izlaz:

Izrada izlaza sigurnih web servisa

Gornji izlaz se prikazuje kada se program pokrene, ลกto znaฤi da je web servis sada dostupan. Kliknite na Servis Descriptionska veza.

Opis usluge Izrada sigurnih web usluga

Iz opisa usluge sada ฤ‡ete moฤ‡i vidjeti da su korisniฤko ime i lozinka elementi usluge wsdl datoteka. Ovi parametri moraju se poslati kada se pozove web usluga.

Najbolji primjeri iz prakse za sigurnost web usluga

Slijede sigurnosne mjere koje treba uzeti u obzir pri radu s web servisima:

  1. Revizija i upravljanje zapisnicima โ€“ Koristite zapisivanje podataka aplikacije za zapisivanje svih zahtjeva koji dolaze web servisima. To daje detaljno izvjeลกฤ‡e o tome tko je pozvao web servis i moลพe pomoฤ‡i u analizi utjecaja ako doฤ‘e do bilo kakvog sigurnosnog propusta.
  2. Tijek poziva prema web servisu โ€“ Pokuลกajte zabiljeลพiti tijek poziva u web servisima. Prema zadanim postavkama, aplikacija moลพe pozivati โ€‹โ€‹viลกe zahtjeva za web servise s tokenima za autentifikaciju koji se prosljeฤ‘uju izmeฤ‘u tih web servisa. Sve pozive izmeฤ‘u web servisa potrebno je pratiti i zapisivati.
  3. Osjetljive informacije โ€“ Ne ukljuฤujte osjetljive podatke u svoje zapise kao ลกto su lozinke, brojevi kreditnih kartica ili bilo koje druge povjerljive informacije. Ako postoji dogaฤ‘aj koji sadrลพi bilo koju od ovih informacija, potrebno ju je odbaciti prije zapisivanja.
  4. Track Poslovanje Operama - Track znaฤajne poslovne operacije. Na primjer, instrumentirajte svoju aplikaciju za biljeลพenje pristupa posebno osjetljivim metodama i poslovnoj logici. Uzmimo za primjer online trgovinuping aplikacija. U tipiฤnoj aplikaciji postoji viลกe koraka, kao ลกto su odabir artikala za kupnju, uฤitavanje artikala u koลกaricu i zatim konaฤna kupnja. Cijeli ovaj poslovni tijek rada mora biti trackoje je odredila web usluga.
  5. Ispravna autentifikacija โ€“ Autentifikacija je mehanizam kojim klijenti mogu utvrditi svoj identitet s web servisom koristeฤ‡i odreฤ‘eni skup vjerodajnica koje mogu dokazati taj identitet. Nikada se ne bi smjele pohranjivati โ€‹โ€‹korisniฤke vjerodajnice, pa stoga, ako se WS Security koristi za pozivanje web servisa, treba napomenuti da web servis ne bi smio pohranjivati โ€‹โ€‹vjerodajnice koje se ลกalju u SOAP zaglavlju. Web servis bi ih trebao odbaciti.

Pitanja i odgovori

Umjetna inteligencija moลพe pratiti promet web servisa u stvarnom vremenu, otkrivati โ€‹โ€‹neobiฤne obrasce zahtjeva i oznaฤavati vjerojatne napade poput ubrizgavanja ili zlouporabe tokena. Takoฤ‘er moลพe skenirati WSDL i SOAP konfiguracije radi slabe autentifikacije ili nedostajuฤ‡e enkripcije.

Da. Modeli strojnog uฤenja obuฤeni na normalnom prometu mogu uoฤiti anomalije poput pretrpavanja vjerodajnica, oลกteฤ‡enih SOAP zaglavlja ili napada ponavljanjem. Sigurnosni timovi i dalje bi trebali pregledati upozorenja prije blokiranja zahtjeva kako bi izbjegli ometanje legitimnih klijenata.

HTTPS ลกifrira vezu izmeฤ‘u dvije toฤke, tako da su podaci izloลพeni nakon ลกto stignu do posredniฤkog posluลพitelja. WS-Security osigurava samu SOAP poruku, keeping zaลกtiฤ‡en je od poฤetka do kraja ฤak i kada prolazi kroz viลกe posluลพitelja.

UsernameToken je WS-Security element smjeลกten u SOAP zaglavlju koji sadrลพi korisniฤko ime i, opcionalno, lozinku. Omoguฤ‡uje web servisu autentifikaciju pozivatelja prije obrade zahtjeva.

Saลพmite ovu objavu uz: