Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.



Hasonló dokumentumok
Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk. Cserép Máté

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET)

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 5.ELŐADÁS. Sütik és munkamenetek kezelése

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 14. fejezet. Szolgáltatások adatkezelése (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

1. beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

Bevezető. Servlet alapgondolatok

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

JavaServer Pages (JSP) (folytatás)

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Webes alkalmazások fejlesztése 6. előadás. Weblapok fejlesztése és architektúrája (ASP.NET)

Weboldalak Biztonsági Kérdései

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

Felhasználói kézikönyv

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

1. ábra Fájl feltöltése 2. ábra Megtekintés

OOP #14 (referencia-elv)

Java és web programozás

Cookie Nyilatkozat Válts Fel weboldal

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Felhasználói dokumentáció a teljesítményadó állományok letöltéséhez v1.0

Webes alkalmazások fejlesztése

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)


COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

S, mint secure. Nagy Attila Gábor Wildom Kft.

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

Intézményi interface technikai dokumentáció

Gyakorlati vizsgatevékenység A

Elektronikus levelek. Az informatikai biztonság alapjai II.

Az Egységes Pályázati Keretrendszer használata (akadémiai könyv- és folyóiratkiadási támogatás elnyerésére a 2014.

Az autorizáció részletes leírása

DDNS szolgáltatás beállítása NVR P2P elérésének beállítása

Gyakorlati vizsgatevékenység B

3. Beadandó feladat dokumentáció

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

2. Beadandó feladat dokumentáció

Hiteles Elektronikus Postafiók

Programozás II. ATM példa Dr. Iványi Péter

Alapfogalmak. Biztonság. Biztonsági támadások Biztonsági célok

C++ programozási nyelv

ADATVÉDELEMI TÁJÉKOZTATÓ

Swing GUI készítése NetBeans IDE segítségével

2. Beadandó feladat dokumentáció

BOOKING GUIDE. itbroadcast - INFOTÉKA

Java Servlet technológia

HÁLÓZATI HASZNÁLATI ÚTMUTATÓ

Ingyenes DDNS beállítása MAZi DVR/NVR/IP eszközökön

Felhasználói útmutató

Tájékoztató az 1.10-es labor használatához

API tervezése mobil környezetbe. gyakorlat

CAMLAND Beruházás-megfigyelő

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

Felhasználói kézikönyv a WEB EDInet rendszer használatához

ELEKTRONIKUS MUNKABÉRJEGYZÉK MODUL

Objektumorientált programozás C# nyelven

Java és web programozás

Adatkezelési nyilatkozat, szabályzat

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Tájékoztató és szabályzat a sütik alkalmazásáról. (A dokumentum letöltése: ITT)

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Gyakorlati vizsgatevékenység B

Beszámoló átadása az OBR * -nek a Hessyn Éves beszámoló nyomtatványkitöltő programból

Java programozási nyelv 6. rész Java a gyakorlatban

Példa webáruház kialakítás rendszerdokumentáció

Java II. I A Java programozási nyelv alapelemei

Bejelentkezés az egyetemi hálózatba és a számítógépre

Beszámoló átadása az OBR * -nek a Hessyn Éves beszámoló nyomtatványkitöltő programból

Model View Controller alapú alkalmazásfejlesztés

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez


PHP. Adatbázisok gyakorlat

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET Core) Cserép Máté

Java II. I A Java programozási nyelv alapelemei

Új Magyarország Fejlesztési Terv Tájékoztató A ZMNE-n bevezetett wifi szolgáltatásról KMOP-4.2.1/B

Webtárhely létrehozása a helyen. Lépések Teendő 1. Böngészőbe beírni: 2. Jobb oldalon regisztrálni (tárhelyigénylés).

Ungváry Rudolf: Relex Relációkat és lexikai egységeket kezelő névtérszerkesztő a weben

Felhasználói útmutató

Ügyfélkapu. etananyag

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 6. előadás Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

A HTTP protokoll A HTTP protokoll a kérés/válasz paradigmára épül, vagyis a kliens elküld egy kérést, amelyre a szerver (alkalmazás) válaszol a kérések egymástól függetlenül kerülnek kiszolgálásra minden kiszolgáláshoz külön objektumok jönnek létre, amelyek előállítják a választ, majd megsemmisülnek kérés válasz kliens vezérlő példányosítása eredmény HTML összeállítása ELTE IK, Webes alkalmazások fejlesztése 6:2

Eszközök Két kérés között sokszor szeretnénk megőrizni az állapotot pl. a felhasználó bejelentkeztetése, az űrlap mezők kitöltései objektum erre nincs lehetőség (a mezők megsemmisülnek), osztályszinten pedig nincs garancia a megőrzésre Az állapotot a szerver speciális eszközökkel tudja fenntartani kliens oldalon: elérési útvonal, weblap értékei (űrlapmezők, rejtett mezők), sütik szerver oldalon: egy kliensre: munkamenet minden kliensre: alkalmazás ELTE IK, Webes alkalmazások fejlesztése 6:3

Munkamenet állapotok A munkamenet (session) egy kliens weblapon történő tartózkodása, és közben végrehajtott tevékenységei minden kliens rendelkezik (pontosan) egy saját munkafolyamattal a szerver automatikusan elindul, amikor a kliens először kérést küld a szerverre automatikusan végződik, amikor a kliens egy megadott ideig nem intéz kérést, ezt egy időzítő felügyeli, amely minden kéréssel újraindul (session timeout) a klienst a kérés paraméterei (IP cím, böngésző, ) alapján azonosítja, ami meghamisítható (session hijacking) ELTE IK, Webes alkalmazások fejlesztése 6:4

Munkamenet állapotok kliens kérés munkamenet indul munkamenet folytatódik időzítő indul időzítő újraindul munkamenet vége munkamenet indul időzítő lejár időzítő indul ELTE IK, Webes alkalmazások fejlesztése 6:5

Munkamenet állapotok A munkamenethez szerver oldalon bármikor hozzáférhetünk a vezérlő/nézet Session tulajdonságán keresztül ebben kulcs/érték párokként elhelyeztünk az adott kliensre vonatkozó adatokat, amelyeket a szerver a memóriában tárol (a munkafolyamat megszűnéséig), pl.: Session["myKey"] = myvalue; az adatokhoz a kliens közvetlenül nem férhet hozzá, csak a szerver látja és kezeli őket a munkamenet azonosítója a Session.SessionID tulajdonsággal kérhető le a munkamenet várakozási ideje a Session.Timeout tulajdonsággal állítható (alapértelmezetten 20 perc) ELTE IK, Webes alkalmazások fejlesztése 6:6

Adattitkosítás Az adatlopás elkerülése végett fontos, azonosításra szolgáló adatokat mindig kódoltan tároljuk az adatbázisban a kódoláshoz egyirányú kódoló algoritmusokat használunk (pl. MD5, SHA1, SHA512), amelyek nem fejthetőek vissza, viszont azonosítósára használhatóak a kódoló eljárások a System.Security.Cryptography névtérben helyezkednek el a kódolás előtt és/vagy után célszerű megsózni a jelszót (password salt), azaz tegyünk bele extra karaktereket és byte-okat, hogy megnehezítsük a jelszó visszakeresését a só lehet fix, véletlenszerű, vagy időfüggő, ilyenkor magát a sót is eltárolhatjuk az adatbázisban ELTE IK, Webes alkalmazások fejlesztése 6:7

Adattitkosítás Pl.: String pwdtext = // jelszó szöveges alakja SHA1CryptoServiceProvider coder = // SHA1 kódoló objektum Byte[] pwdbytes = coder.computehash( Encoding.UTF8.GetBytes(pwdText)); // kódolás végrehajtása a szövegből kiolvasott // UTF8 értékeken, az eredmény 160 bites lesz Byte[] storedbytes = // kinyerjük az eltárolt kódolt jelszót if (pwbytes.sequenceequals(storedbytes)) { } // ha a kettő megegyezik, jó a jelszó ELTE IK, Webes alkalmazások fejlesztése 6:8

Példa Feladat: Valósítsuk az utazási ügynökség weblapjának felhasználó kezelési funkcióját. a felhasználók regisztrálhatnak, és adataikat foglaláskor automatikusan kitölti a weblap egy új vezérlőben (AccountController) kezeljük a regisztráció (Register), bejelentkezés (Login) és kijelentkezés (Logout) funkciókat, amelyekhez két új nézetet készítünk létrehozunk két új segédtípust, amely a bejelentkezés adatait (LoginViewModel), illetve a regisztráció adatait (RegisterViewModel) tárolja az adatbázist kiegészítjük a jelszóval (SHA1 kódolva) ELTE IK, Webes alkalmazások fejlesztése 6:9

Példa Tervezés (adatbázis): ELTE IK, Webes alkalmazások fejlesztése 6:10

Példa Tervezés (architektúra): Controller Controllers::BaseController # _entities :TravelAgencyEntities + BaseController() Controllers::RentController + Index(Int32?) :ActionResult + Index(Int32?, RentViewModel) :ActionResult Controllers::AccountController + Index() :ActionResult + Login() :ActionResult + Login(LoginViewModel) :ActionResult + Register() :ActionResult + Register(RegisterViewModel) :ActionResult + Logout() :ActionResult Controllers::HomeController + Index() :ActionResult + List(Int32?) :ActionResult + Details(Int32?) :ActionResult + ImageForBuilding(Int32?) :FileResult + Image(Int32?, Boolean) :FileResult Models::LoginViewModel «property» + UserName() :String + UserPassword() :String Models::RegisterViewModel «property» + CustomerName() :String + CustomerEmail() :String + CustomerAddress() :String + CustomerPhoneNumber() :String + UserName() :String + UserPassword() :String + UserConfirmPassword() :String Models::RentViewModel «property» + Apartment() :Apartment + RentStartDate() :DateTime + RentEndDate() :DateTime + TotalPrice() :Int32 ELTE IK, Webes alkalmazások fejlesztése 6:11

Példa Megvalósítás (AccountController.cs): [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginViewModel login) { Session["user"] = login.username; // felvesszük a felhasználó nevét a // munkamenetbe Session.Timeout = 15; // max. 15 percig él a munkamenet } return RedirectToAction("Index", "Home"); // átirányítjuk a főoldalra ELTE IK, Webes alkalmazások fejlesztése 6:12

Példa Megvalósítás (_Layout.cshtml): @if (Session["user"] == null) { // itt is hozzáférünk a munkafolyamathoz } else { <table><tr> <td colspan="2"> Üdvözöljük, @Session["user"]!</td> </tr><tr> <td>@html.actionlink("kijelentkezés", "Logout", "Account")</td> } ELTE IK, Webes alkalmazások fejlesztése 6:13

Alkalmazás állapotok Az egész web alkalmazásra vonatkozó, globális információkat is tárolhatunk a vezérlő HttpContext.Application vagy a nézet HttpContext.Current.Application tulajdonságán keresztül pl.: HttpContext.Application["myKey"] = myvalue; // alkalmazás érték beállítása minden vezérlőből ugyanahhoz a példányhoz férünk hozzá, így egyéni információk számára nem alkalmas mivel párhuzamosan többen hozzáférhetnek, ezért célszerű kritikus szakaszba helyezni a beépített Lock és Unlock metódusokkal ELTE IK, Webes alkalmazások fejlesztése 6:14

Alkalmazás állapotok webalkalmazás alkalmazásállapot munkamenet 1 állapot munkamenet 2 állapot munkamenet n állapot vezérlő 1 vezérlő 2 vezérlő n kliens 1 kliens 2 kliens n ELTE IK, Webes alkalmazások fejlesztése 6:15

Alkalmazás állapotok A web alkalmazásunk globális állapotkezeléséhez rendelkezésünkre áll az alkalmazás osztály (Global Application Class) a HttpApplication leszármazottja, minden projektben egy található Global.asax néven egy eseménykezelő halmazt tartalmaz, amelyek az alkalmazás, illetve az egyes munkamenetek kezdésére/végére, vagy hibajelenségek hatására futnak le közvetlenül elérhetőek benne az alkalmazás (Application), illetve a munkamenetek (Session) értékei alapból tartalmazza az útvonalak feloldásának konfigurációját ELTE IK, Webes alkalmazások fejlesztése 6:16

Alkalmazás állapotok pl.: protected void Application_Start(){ // útvonalkonfiguráció betöltése Application["sessionCount"] = 0; // alkalmazásszintű változó } protected void Session_Start(){ Application["sessionCount"] = (Int32)(Application["sessionCount"]) + 1; // változtatás } ELTE IK, Webes alkalmazások fejlesztése 6:17

Sütik A HTTP süti (HttpCookie) olyan információgyűjtemény, amelyet a kliens eltárol egy fájlban, így az oldal későbbi látogatása során a felhasználóra vonatkozó adatok abból visszatölthetőek a sütik adott webcímre vonatkoznak, és kulcs/érték párokat tartalmaznak (vagy csupán egy értéket), pl.: HttpCookie cookie = new HttpCookie("MyCookie"); cookie.add("mykey", myvalue); megadhatunk lejáratot, amely elteltével a süti törlődik, pl.: cookie.expires = DateTime.Now.AddDays(10); az adott webcímhez tartozó sütiket a böngésző automatikusan továbbítja a kérésben ELTE IK, Webes alkalmazások fejlesztése 6:18

Sütik Sütiket a vezérlőben kezelhetjük a kéréssel küldött sütiket a Request.Cookies gyűjteményben találjuk, pl.: HttpCookie c = Request.Cookies["MyCookie"]; a válaszhoz sütiket a Response.Cookies gyűjteménybe helyezhetjük, pl.: Response.Cookies.Add(cookie); sütit úgy törölhetünk, hogy az érvényességét lejárt időpontra állítjuk (és így a böngész kitörli) A munkafolyamatok klienseinek beazonosításához is sütiket használunk, ez a munkafolyamat süti (ASP.NET_SessionId) ELTE IK, Webes alkalmazások fejlesztése 6:19

Sütik Pl.: [HttpPost] public ActionResult LoginUser(UserData user){ if (user.remberme) { // ha kérte az azonosító megjegyzését HttpCookie c = new HttpCookie("uid"); c["username"] = user.username; Response.Cookies.Add(c); // az azonosítót elküldjük a kliensnek } return View(); } ELTE IK, Webes alkalmazások fejlesztése 6:20

Sütik [HttpGet] public ActionResult LoginUser(){ UserData user = // amikor legközelebb betölti az oldalt if (Request.Cookies["uid"]!= null) { // és megjegyeztette az azonosítót } user.username = HttpContext.Request. Cookies["uid"]["userName"].ToString(); // beállítjuk előre az azonosítót } return View(user); ELTE IK, Webes alkalmazások fejlesztése 6:21

Példa Feladat: Valósítsuk az utazási ügynökség weblapjának felhasználó kezelési funkcióját. lehessen megjegyezni a belépést, és a weblap jelenítse meg, mennyi felhasználó és mennyi vendég tartózkodik az oldalon az azonosító megjegyzéséhez sütit használunk, amelyet bejelentkezést követően továbbítunk a felhasználónak (a sütiben a felhasználónevet tároljuk) a kliensek számát a globális alkalmazás állapotban tároljuk, és munkafolyamat kezdetekor/befejezésekor, illetve be- és kijelentkezéskor módosítjuk az értékeket (ehhez bővítjük a Global.asax funkcionalitását is) ELTE IK, Webes alkalmazások fejlesztése 6:22

Példa Megvalósítás (Global.asax.cs): protected void Application_Start() { Application["guestCount"] = 0; // kinullázzuk a vendégek számát } protected void Session_Start(){ // munkafolyamat indulása Application["guestCount"] = (Int32)Application["guestCount"] + 1; // módosítjuk a vendégek számát } ELTE IK, Webes alkalmazások fejlesztése 6:23

Példa Megvalósítás (AccountController.cs): public void Login(LoginViewModel login) { if (login.rememberme) { // ha meg kell jegyeznünk a felhasználónevet HttpCookie cookie = new HttpCookie("user"); // akkor elküldjük azt sütiként cookie["username"] = login.username; cookie.expires = DateTime.Today.AddDays(365); // egy évig lesz érvényes a süti Response.Cookies.Add(cookie); } ELTE IK, Webes alkalmazások fejlesztése 6:24

Sütik biztonságos kezelése Mivel a sütik szolgáltatják a kliens oldali információtárolás (és benne a munkamenet tárolás) alapját, különösen figyelni kell a biztonságukra felhasználói adatokat (különösen jelszavakat) direkt módon ne tároljuk sütiben a sütik tartalmát kódolhatjuk, vagy helyettesíthetjük speciális azonosítókkal szabályozható, hogy kliens oldali szkriptek ne férjenek hozzá a sütihez (HttpOnly) szabályozható, hogy csak biztonságos (TSL/SSL) kapcsolat esetén továbbítódjanak (Secure) ELTE IK, Webes alkalmazások fejlesztése 6:25

Sütik biztonságos kezelése Amennyiben sütiket használunk a felhasználó azonosítására, különös tekintettel kell lennünk a biztonságra az információt osszuk el több sütibe jelszavak helyett használjunk egyedi azonosítókat (Guid), amelyeket mindkét oldalon eltárolunk az azonosító cserélhetjük minden bejelentkezéssel a felhasználói azonosítók mellett tárolhatunk felhasználóspecifikus információkat a Request tulajdonság számos információt tartalmaz a kliensről (UserHostAddress, UserHostName, ), amik szintén elmenthetőek (kódolva) a sütibe ELTE IK, Webes alkalmazások fejlesztése 6:26