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.
ล 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.
U standardnoj HTTPS komunikaciji izmeฤu klijenta i posluลพitelja odvijaju se sljedeฤi koraci:
- 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.
- Posluลพitelj se zatim autentificira klijentu slanjem svojeg certifikata. Ovo osigurava da klijent komunicira s pravim posluลพiteljem.
- 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.
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:
- Ako je poruka unutar tijela SOAP-a potpisana bilo kojim sigurnosnim kljuฤem, taj se kljuฤ moลพe definirati u elementu zaglavlja.
- 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.
U nastavku su navedeni koraci koji se odvijaju u gore navedenom tijeku rada:
- 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.
- Sigurnosni token zatim se prosljeฤuje klijentu web usluge.
- Klijent web servisa zatim poziva web servis, ali ovaj put osiguravajuฤi da je sigurnosni token ugraฤen u SOAP poruku.
- 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.
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
- 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.
- 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.
Nakon ลกto zavrลกite, vidjet ฤete stvorenu datoteku projekta u vaลกem istraลพivaฤu rjeลกenja u Visual Studiju 2013.
Korak 3) U ovom koraku ฤemo naลกem projektu dodati datoteku web servisa.
- Prvo, desnom tipkom miลกa kliknite datoteku projekta kao ลกto je prikazano dolje.
- 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.
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.
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.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Objaลกnjenje:
- 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.
- 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.
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:
- 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.
- Atribut [SoapHeader] sada se koristi kako bi se specificiralo da kada se pozove web usluga, treba proslijediti korisniฤko ime i lozinku.
- 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:
Gornji izlaz se prikazuje kada se program pokrene, ลกto znaฤi da je web servis sada dostupan. Kliknite na Servis Descriptionska veza.
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:
- 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.
- 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.
- 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.
- 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.
- 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.














