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

Hasonló dokumentumok
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) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

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) Cserép Máté.

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 Core) Cserép Máté

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

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

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 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) 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

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

1. beadandó feladat dokumentáció

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

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

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

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.

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

Felhasználói kézikönyv

Bevezető. Servlet alapgondolatok

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

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é

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

Weboldalak Biztonsági Kérdései

JavaServer Pages (JSP) (folytatás)

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

OOP #14 (referencia-elv)

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

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

Java és web programozás

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

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

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

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

2. Beadandó feladat dokumentáció

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

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Cookie Nyilatkozat Válts Fel weboldal

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.

Webes alkalmazások fejlesztése. 9. előadás Bevezetés az ASP.NET MVC keretrendszerbe

2. Beadandó feladat dokumentáció

3. Beadandó feladat dokumentáció

Hiteles Elektronikus Postafiók

és az instanceof operátor

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

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

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

Webes alkalmazások fejlesztése

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

API tervezése mobil környezetbe. gyakorlat

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

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

Diplomaterv Portál. Elektronikus szakdolgozat és diplomaterv nyilvántartó és archiváló rendszer. Útmutató a címtáras bejelentkezéshez v14

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

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET Core) Cserép Máté

Objektumorientált programozás C# nyelven

CAMLAND Beruházás-megfigyelő

HÁLÓZATI HASZNÁLATI ÚTMUTATÓ

C#, OOP. Osztályok tervezése C#-ban

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Elektronikus levelek. Az informatikai biztonság alapjai II.

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Programozási technológia

Model View Controller alapú alkalmazásfejlesztés

Gyakorlati vizsgatevékenység B

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

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

Intézményi interface technikai dokumentáció

Regisztráció. Kattintson a Regisztráció fülre

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

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


Java és web programozás

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

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

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

ADATVÉDELEMI TÁJÉKOZTATÓ

Java programozási nyelv 4. rész Osztályok II.

Felhasználói útmutató

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

C++ programozási nyelv

Java Servlet technológia

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

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ó. Használható segédeszköz: -

Sütik kezelése (cookie)

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

TERC V.I.P. hardverkulcs regisztráció

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 6. előadás (ASP.NET) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu Készült Giachetta Roberto jegyzete alapján http://www.inf.elte.hu/karunkrol/digitkonyv/

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 objektumokkal 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 szerveren 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ő, süti, ) 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, vagy máshol a HttpContext.Current.Session tulajdonságon 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; 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) az adatokhoz a kliens nem férhet hozzá 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 SHA512CryptoServiceProvider coder = // SHA512 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 a regisztráció nem kötelező, az újonnan megadott adatok a korábbiak szerint mentődnek (automatikusan generált felhasználónévvel) egy új vezérlőben (AccountController) kezeljük a regisztráció (Register), bejelentkezés (Login) és kijelentkezés (Logout) funkciókat a regisztráció és a bejelentkezés megfelelő nézeteket kapnak, űrlapokkal ELTE IK, Webes alkalmazások fejlesztése 6:9

Példa a funkciókat az AccountService osztály hajtja végre, amely megvalósítja az IAccountService interfészt a bejelentkezés, kijelentkezés és regisztráció mellett lekérhetjük egy adott vendég adatait (GetGuest), és létrehozhatunk vendéget regisztráció (felhasználói adatok) nélkül (Create) a nézetmodell bővül a bejelentkezés (UserViewModel), illetve a regisztráció (GuestRegistrationViewModel) adataival mivel több adat közös a foglalás és a regisztráció között, egy ősosztályba (GuestViewModel) általánosítunk ELTE IK, Webes alkalmazások fejlesztése 6:10

Példa Tervezés (alkalmazás): Controllers::AccountController - _accountservice :IAccountService - _travelservice :ITravelService Controller + AccountController() + Index() :ActionResult + Login() :ActionResult + Login(UserViewModel) :ActionResult + Logout() :ActionResult + Register() :ActionResult + Register(GuestRegistrationViewModel) :ActionResult Controller Controllers::RentController - _accountservice :IAccountService - _travelservice :ITravelService + Index(Int32?) :ActionResult + Index(Int32?, RentViewModel) :ActionResult + RentController() -_accountservice «interface» Models::IAccountService + Create(GuestViewModel, String*) :Boolean + GetGuest(String) :Guest + Login(UserViewModel) :Boolean + Logout() :Boolean + Register(GuestRegistrationViewModel) :Boolean -_accountservice Models::AccountService - _entities :TravelAgencyEntities ELTE IK, Webes alkalmazások fejlesztése 6:11

Példa Tervezés (nézetmodellek): Models::GuestViewModel «property» + GuestAddress() :String + GuestEmail() :String + GuestName() :String + GuestPhoneNumber() :String Models::RentViewModel «property» + Apartment() :Apartment + RentEndDate() :DateTime + RentStartDate() :DateTime + TotalPrice() :Int32 Models:: GuestRegistrationViewModel «property» + UserConfirmPassword() :String + UserName() :String + UserPassword() :String Models::UserViewModel «property» + UserName() :String + UserPassword() :String ELTE IK, Webes alkalmazások fejlesztése 6:12

Példa Megvalósítás (AccountController.cs): [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(UserViewModel user) { Session["user"] = user.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:13

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

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

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

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

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

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

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 (neve alapértelmezetten ASP.NET_SessionId) ELTE IK, Webes alkalmazások fejlesztése 6:20

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

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

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

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ó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:24

Példa Feladat: Valósítsuk az utazási ügynökség weblapjának felhasználó kezelési funkcióját. lehetőséget adunk a felhasználónak a bejelentkezés megjegyzésére 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 felületen megjelenítjük az oldalt böngésző felhasználók számát, ezt alkalmazás állapotban tároljuk ELTE IK, Webes alkalmazások fejlesztése 6:25

Példa Feladat: Valósítsuk az utazási ügynökség weblapjának felhasználó kezelési funkcióját. a munkafolyamat és az alkalmazásállapot kezelését áthárítjuk az AccountService osztályra, így a vezérlő mentesül az állapotkezeléstől a konstruktor ellenőrzi a sütit, és tölti be a munkafolyamatba (így nincs szükség a Session_Start() metódusra) tulajdonságok segítségével kérdezzük le az aktuális felhasználót (CurrentUserName), illetve a felhasználók számát (UserCount) ELTE IK, Webes alkalmazások fejlesztése 6:26

Példa Tervezés (alkalmazás): Controller Controllers::BaseController # _accountservice :IAccountService # _travelservice :ITravelService + BaseController() Controllers::AccountController #_accountservice «interface» Models::IAccountService + Create(GuestViewModel, String*) :Boolean + GetGuest(String) :Guest + Login(UserViewModel) :Boolean + Logout() :Boolean + Register(GuestRegistrationViewModel) :Boolean «property» + CurrentUserName() :String + UserCount() :Int32 + Index() :ActionResult + Login() :ActionResult + Login(UserViewModel) :ActionResult + Logout() :ActionResult + Register() :ActionResult + Register(GuestRegistrationViewModel) :ActionResult Models::AccountService - _entities :TravelAgencyEntities ELTE IK, Webes alkalmazások fejlesztése 6:27