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

Hasonló dokumentumok
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) 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 1. előadás. Webes alkalmazások és biztonságuk

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

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

Felhasználói kézikönyv

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

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 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Bevezető. Servlet alapgondolatok

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

1. beadandó feladat dokumentáció

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

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. ábra Fájl feltöltése 2. ábra Megtekintés

JavaServer Pages (JSP) (folytatás)

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

Weboldalak Biztonsági Kérdései

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

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é

Java és web programozás

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

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

Hiteles Elektronikus Postafiók

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

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

Gyakorlati vizsgatevékenység B

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

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

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

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

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

Cookie Nyilatkozat Válts Fel weboldal

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

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.

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

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

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

Webes alkalmazások fejlesztése

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

2. Beadandó feladat dokumentáció

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

CAMLAND Beruházás-megfigyelő

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

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

Felhasználói útmutató

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

3. Beadandó feladat dokumentáció

Programozási technológia

Elektronikus levelek. Az informatikai biztonság alapjai II.

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

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

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

HÁLÓZATI HASZNÁLATI ÚTMUTATÓ

Enterprise JavaBeans 1.4 platform (EJB 2.0)

API tervezése mobil környezetbe. gyakorlat

OOP #14 (referencia-elv)

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

C++ programozási nyelv

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

Felhasználói útmutató

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

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

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

2. Beadandó feladat dokumentáció

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é

Java Servlet technológia

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

Web-fejlesztés NGM_IN002_1

Regisztrációs segédlet A roma közösségekben dolgozó védőnők. munkafeltételeinek javítása elnevezésű norvég projekt keretében

Model View Controller alapú alkalmazásfejlesztés

TÁJÉKOZTATÓ az OTH Szakrendszeri Információs Rendszerbe (OSZIR) történő regisztráció és belépés menetéről belföldi partner nevében

Objektumorientált programozás C# nyelven

Parlagfű Bejelentő Rendszer

Tudás Reflektor. Copyright 2011; Kodácsy Tamás;

és az instanceof operátor

GráfRajz fejlesztői dokumentáció

Hálózati operációs rendszerek II.

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

Gyakorlati vizsgatevékenység A

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

Tartalom. Bejelentkezés...2 Feltöltés...3 Dokumentumok...4 Jelszómódosítás...7 Jelszókérés...7 Kijelentkezés...8


Gyakorlati vizsgatevékenység 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).

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

Hogy miért akarnak lehallgatni minket az lehallgatónként változik.

Ügyfélkapu. etananyag

BOOKING GUIDE. itbroadcast - INFOTÉKA

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 6. előadá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 ot 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 ot 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: minden kliensre: alkalmazás A (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 el, 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 felügyeli, amely minden kéréssel újra (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:3 ELTE IK, Webes alkalmazások fejlesztése 6:4 kliens kérés folytatódik újra A hez 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; vége lejár a azonosítója a Session.SessionID tulajdonsággal kérhető le a 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:5 ELTE IK, Webes alkalmazások fejlesztése 6:6 1

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 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 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:9 ELTE IK, Webes alkalmazások fejlesztése 6:10 Tervezés (alkalmazás): Tervezés (nézetmodellek): ELTE IK, Webes alkalmazások fejlesztése 6:11 ELTE IK, Webes alkalmazások fejlesztése 6:12 2

Megvalósítás (AccountController.cs): [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(UserViewModel user) { Session["user"] = user.username; // be Session.Timeout = 15; // max. 15 percig él a return RedirectToAction("Index", "Home"); // átirányítjuk a főoldalra 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 ELTE IK, Webes alkalmazások fejlesztése 6:14 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 webalkalmazás alkalmazás pl.: HttpContext.Application["myKey"] = myvalue; // alkalmazás érték beállítása 1 2 n 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 vezérlő 1 vezérlő 2 vezérlő n kliens 1 kliens 2 kliens n ELTE IK, Webes alkalmazások fejlesztése 6:15 ELTE IK, Webes alkalmazások fejlesztése 6:16 A web alkalmazásunk globális kezelé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 ek 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 ek (Session) értékei alapból tartalmazza az útvonalak feloldásának konfigurációját ELTE IK, Webes alkalmazások fejlesztése 6:17 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 3

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 et 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 ELTE IK, Webes alkalmazások fejlesztése 6:20 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(); [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 ELTE IK, Webes alkalmazások fejlesztése 6:22 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) minden munkafolyamat ásakor (Session_Start) ellenőrizzük a süti jelenlétét a felületen megjelenítjük az oldalt böngésző felhasználók számát, ezt alkalmazás ban tároljuk Megvalósítás (AccountController.cs): public void Login(UserViewModel user) { if (user.rememberlogin) { // 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:23 ELTE IK, Webes alkalmazások fejlesztése 6:24 4

Megvalósítás (Global.asax.cs): protected void Session_Start(){ // munkafolyamat ása if (Request.Cookies["user"]!= null) { Session["user"] = Request.Cookies["user"]["userName"]; // be Session.Timeout = 15; // max. 15 percig él a biztonságos kezelése Mivel a sütik szolgáltatják a kliens oldali információtárolás (és benne a 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 ELTE IK, Webes alkalmazások fejlesztése 6:26 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 a munkafolyamat és az alkalmazás kezelését áthárítjuk az AccountService osztályra, így a vezérlő mentesül az kezelé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:27 ELTE IK, Webes alkalmazások fejlesztése 6:28 Tervezés (alkalmazás): Megvalósítás (AccountService.cs): public AccountService() { if (HttpContext.Current.Request.Cookies["user"]!= null && HttpContext.Current.Session["user"] == null) { HttpContext.Current.Session["user"] = HttpContext.Current.Request. Cookies["user"]["userName"]; // be ELTE IK, Webes alkalmazások fejlesztése 6:29 ELTE IK, Webes alkalmazások fejlesztése 6:30 5