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

Hasonló dokumentumok
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 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

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 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 6. előadás. Állapotfenntartás (ASP.NET) Cserép Máté.

Weboldalak Biztonsági Kérdései

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

Készítette: Gál Tamás. A tananyag programozott változata itt érhető el: Webfejlesztés

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

3. Beadandó feladat dokumentáció

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

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

WEB PROGRAMOZÁS 3.ELŐADÁS. Űrlapok

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

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

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

Internet technológiák

API tervezése mobil környezetbe. gyakorlat

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

PHP-MySQL. Adatbázisok gyakorlat

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

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.

Java és web programozás

Webes alkalmazások fejlesztése

Labor leletező program

1. fejezet Bevezetés a web programozásába (Balássy György munkája) Az internet működése... 11

Felhasználói útmutató a portal.nakvi.hu oldalhoz

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

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

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

1. beadandó feladat dokumentáció

Gyakorlati vizsgatevékenység A

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

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

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

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

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Elektronikus levelek. Az informatikai biztonság alapjai II.

Dokumentumtár A hatósági statisztika adatszolgáltatása lépésről-lépésre

Gyakorlati vizsgatevékenység B

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

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

HVK Adminisztrátori használati útmutató

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.

Technikai információk fejlesztőknek

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

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

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

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

C#---Access adatbáziskezelési gyakorlat

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

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

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

Tájékoztató a szakdolgozat elektronikus feltöltéséről

Hiba bejelentés azonnal a helyszínről elvégezhető. Egységes bejelentési forma jön létre Követhető, dokumentált folyamat. Regisztráció.

Felhasználói kézikönyv. Tőkepiaci Közzététel. Magyar Nemzeti Bank

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

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

FRISSÍTÉSI LEÍRÁS A WINIKSZ PROGRAMCSOMAGHOZ

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

KKK2.0 Regisztráció. A regisztráció teljes folyamata: 1. Ügyfél kommunikációs jogosultságának regisztrálása a NAV vámszerveinél.

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.

Felhasználói kézikönyv

APB mini PLC és SH-300 univerzális kijelző Általános használati útmutató

FELHASZNÁLÓI ÚTMUTATÓ

BaBér. Bérügyviteli rendszer. Telepítési segédlet 2014.

Nokia C6 (Mail for Exchange) beállítása Virtualoso levelezésre

Models are not right or wrong; they are more or less useful.

MOL NYRT - WEB ISA 3.0 FELHASZNÁLÓI KÉZIKÖNYV

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

Felhasználói kézikönyv

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, Quantum GIS program alkalmazásával Útmutató 2010.

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

Vectory telepítési útmutató

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

WordPress segédlet. Bevezető. Letöltés. Telepítés

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

Atlon XML interface fejlesztői dokumentáció. Dokumentum verzió: 3.0

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

Elmib Önkormányzati hibabejelentő. Felhasználói kézikönyv v1.0

PHP. Adatbázisok gyakorlat

az adatbevitel szabályozása, alapok

Cikktípusok készítése a Xarayában

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Telenor Webiroda. Kezdő lépések

10.óra CodeIgniter Framework #3. Gyimesi Ákos

Felhasználói kézikönyv

RBLDNS DNS-based blocklists management felhasználói kézikönyv

Felhasználói kézikönyv

KIR-STAT 2017 pedagógus adatok feltöltése KIR SZNY elemi adatok alapján Felhasználói útmutató (v.2)

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

Kompozit alkalmazások fejlesztése. IBM WebSphere Portal Server

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 5. előadás Adatbevitel és validáció (ASP.NET Core) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu

Űrlapok Sok esetben szükséges, hogy a felhasználó adatokat vigyen fel a weblapokon (pl. felhasználónév/jelszó), ezt űrlapok (form elem) keretében teheti meg az űrlapokban vezérlőket helyezünk el, amelyeknek tartalmát POST típusú kérésben tudjuk a szerverre küldeni űrlapokat a Html.BeginForm művelettel tudunk létrehozni egy @using blokkba helyezzük, ez megadja a hatókörét az űrlapon belül beviteli mezőket (input elemeket) használunk, elküldéséhez pedig egy gombot (submit típusú input elemet) a value attribútummal megadjuk, a modell mely értékeit (tulajdonságait) visszük be ELTE IK, Webes alkalmazások fejlesztése 5:2

Űrlapok pl.: public class UserData { // a nézetmodell típusa } public Int32 UserId { get; set; } // felhasználó azonosítója public String UserName { get; set; } // felhasználónév public String UserPass { get; set; } // jelszó public String Birthdate { get; set; } // születési idő ELTE IK, Webes alkalmazások fejlesztése 5:3

Űrlapok pl.: @model UserData @using (Html.BeginForm()){ // űrlap kezdete <div>your name: <input name="username" value="@model.username" /> @* szövegbeviteli mező, amelyben a modell UserName tulajdonságát állítjuk be *@ </div> @* további adatbekérés *@ <input type="submit" value="login" /> @* űrlap elküldő gomb *@ } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:4

Űrlapok Az űrlapok ugyanúgy egy akciót futtatnak, ám átadják ennek az akciónak a bevitt modell adatokat alapértelmezetten ugyanazt az akciót futtatják, amely létrehozta a nézetüket, de ezt paraméterben megadhatjuk, illetve lehetősünk van átirányításra, pl.: @using (Html.BeginForm("Index", "LoginController", )) a vezérlőben megadhatjuk, hogy egy akció csak a GET, vagy POST kérésre hajtódjon végre (HttpGet és HttpPost attribútum), így szétválasztható a két működés attribútumok nélkül egy műveletben kell a két állapotot kezelni (mivel ilyenkor túlterhelés nem engedélyezett) ELTE IK, Webes alkalmazások fejlesztése 5:5

Űrlapok pl.: public class LoginController : Controller { [HttpGet] // ez fut le az oldal betöltésére public ActionResult Index(){ return View(); // itt még csak üresen // prezentáljuk a nézetet } [HttpPost] // ez fut le az űrlap elküldésére public ActionResult Index(UserData data) { // paraméterben megkapjuk az űrlapban // kitöltött modellt } ELTE IK, Webes alkalmazások fejlesztése 5:6

Adatbevitel űrlapokban Az űrlapon belül a beviteli mezőket műveletek segítségével is előállíthatjuk, pl.: @Html.TextBox("userName", "@Model.UserName") Az űrlapon belül a beviteli mezőket (erősen típusos nézetben) egy adott tulajdonságra is generálhatjuk, pl.: @Html.TextBoxFor(m => m.username) A következő beviteli mezőket használhatjuk: szövegdoboz (TextBox), szövegmező (TextArea), jelszómező (Password) kijelölő (CheckBox), rádiógomb (RadioButton), legördülő menü (DropDownList), lista (ListBox) ELTE IK, Webes alkalmazások fejlesztése 5:7

Adatbevitel űrlapokban pl.: @model UserData @using (Html.BeginForm()){ // űrlap kezdete <div>your name: @Html.TextBoxFor(m => m.username)</div> <div>your password: @Html.PasswordFor(m => m.userpass)</div> @* a beviteli mezőket generáljuk a tulajdonságokhoz *@ <input type="submit" value="login" /> } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:8

Adatbevitel űrlapokban Amennyiben nem ismerjük előre a modelltulajdonság típusát, használhatunk dinamikusan generált elemeket: az Editor művelet dinamikusan generálja a beviteli mezőt a Label művelet címkét hoz létre a megadott tulajdonsághoz, míg a Display csak olvasható módon jeleníti meg a tartalmat Amennyiben nem egyenként szeretnénk bekérni a tartalmat, a teljes nézetmodell összes adatát megjeleníthetjük (LabelForModel, DisplayForModel), vagy szerkeszthetjük (EditorForModel) ekkor célszerű annotációkkal felruházni a nézetmodellt ELTE IK, Webes alkalmazások fejlesztése 5:9

Adatbevitel űrlapokban pl.: @model UserData // felhasználói adatok @using (Html.BeginForm()){ // űrlap kezdete <div>@html.labelfor(m => m.username): @Html.EditorFor(m => m.username)</div> @* a szerkesztő és a címke is dinamikus *@ <div>@html.labelfor(m => m.birthdate): @Html.EditorFor(m => m.birthdate)</div> @* itt egy dátumbekérő fog megjelenni *@ <input type="submit" value="login" /> } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:10

Adatbevitel űrlapokban pl.: @model UserData // felhasználói adatok @using (Html.BeginForm()){ // űrlap kezdete @Html.EditorForModel() @* a teljes modelltartalmat szerkeszthetővé tesszük *@ <input type="submit" value="login" /> @* már csak a bejelentkező gombra van szükség *@ } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:11

Űrlapok modelljei A nézetmodellünket, és annak tulajdonságait számos annotiációval (attribútummal) megjelölhetjük, amelyek az űrlapmezők dinamikus generálását befolyásolják így a generáláskor jobban szabályozhatjuk az adatok megjelenítésének/bekérésének módját pl.: megjelenő címke (Display), illetve tartalom megjelenés formátuma (DisplayFormat) elrejtés (HiddenInput) specifikusabb adattípus (DataType), illetve beviteli mező specifikálása (UIHint) ELTE IK, Webes alkalmazások fejlesztése 5:12

Űrlapok modelljei pl.: [DisplayName("User login:")] // megadjuk a bekérő lapnak a címszövegét public class UserData { [HiddenInput(DisplayValue=false)] // ez a mező rejtett lesz, így nem // jelenik meg public Int32 UserId { get; set; } // azonosító [Display(Name="Your name:")] // a címkén a megadott szöveg jelenik meg public String UserName { get; set; } // felhasználónév ELTE IK, Webes alkalmazások fejlesztése 5:13

Űrlapok modelljei [Display(Name="Your password:")] [UIHint("Password")] // a szerkesztőmező egy jelszómező lesz public String UserPass { get; set; } // jelszó } [Display(Name="Your birthday:")] [DisplayFormat(DataStringFormat="yy.MM.dd")] [DataType(DataType.Date)] // csak a dátum fog megjelenni, a megadott // formátumban public DateTime Birthdate { get; set; } // születési dátum ELTE IK, Webes alkalmazások fejlesztése 5:14

Megjelenítő sablonok Megjelenítő (DisplayFor), illetve beviteli (EditorFor) mezőnek nem csak beépített elemeket, hanem általunk létrehozott parciális nézeteket is használhatunk, mint sablonokat (display template) ezeket a Views/Shared/DisplayTemplate könyvtárba helyezzük a tulajdonság ennek a nézetnek a modellje lesz pl.: [Display(Name="Your name:")] [UIHint("MyNameDisplay")] // a MyNameDisplay.cshtml nézetet tölti be public String UserName { get; set; } ELTE IK, Webes alkalmazások fejlesztése 5:15

Űrlapok előállítása tag helperekkel Űrlapok dinamikus előállítására használhatunk tag helper-eket is, könnyebben áttekinthető és tömörebb kódot eredményezve: @* az űrlap kezdete *@ <form asp-action="results"> @* URL megadása *@ <div><label asp-for="username"></label> <input asp-for="username" /></div> @* a címke és a szerkesztő is dinamikus *@ <div><label asp-for="userpass"></label> <input asp-for="userpass" /></div> <div><label asp-for="birthday"></label> <input asp-for="birthday" /></div> </form> ELTE IK, Webes alkalmazások fejlesztése 5:16

Validáció A felhasználótól bekért adatokat mindig ellenőriznünk kell, ez a modell validációja, amely a következő lépésekből áll: 1. a kliens oldalon, amint a felhasználó elküldi az űrlapot: ellenőrizzük, hogy a szükséges adatokat megadták ellenőrizzük, hogy a típusa és formátumuk helyes (pl. e- mail, dátum) jelezzük a felhasználónak, ha bármilyen probléma van 2. sikeres ellenőrzés esetén az adatok a szerverre kerülnek 3. a szerver oldalon ismét lefutnak az ellenőrzések, immár biztonsági ellenőrzéseket is futtatva 4. hiba esetén visszajelzünk a kliensnek, egyébként mentünk ELTE IK, Webes alkalmazások fejlesztése 5:17

Validáció kliens űrlap kitöltés szerver adat ellenőrzés sikeres űrlap ellenőrzés hibajelzés sikertelen sikeres sikertelen adat mentés ELTE IK, Webes alkalmazások fejlesztése 5:18

Validáció A validáció elvégezhető csak szerver oldalon, vagy kliens és szerver oldalon a szerver oldali ellenőrzés mindenképpen szükséges, főleg támadások kivédése miatt a validálás elvégezhető teljesen manuálisan, vagy használhatóak beépített eszközök Szerver oldalon a modell állapotát a vezérlőben a ModelState tulajdonságon keresztül tudjuk kezelni az IsValid érték megadja, hogy minden szükséges érték megtalálható, és típusa megfelelő az AddModelError művelettel jelezhetünk egy hibát ELTE IK, Webes alkalmazások fejlesztése 5:19

Validáció pl.: public class LoginController : Controller { [HttpPost] public ActionResult Index(UserData data) { if (String.IsNullOrEmpty(data.UserName)) // ha üresen hagyták a nevet ModelState.AddModelError("UserName", "User name is required!"); // jelezzük a hibát a tulajdonságra if (ModelState.IsValid) // ha egyébként jók az adatok } ELTE IK, Webes alkalmazások fejlesztése 5:20

Validáció a nézetben A hibákat globálisan, vagy az egyes tulajdonságokra egyenként is megadhatjuk (előbbi esetben nem adjuk meg a tulajdonságot) A nézetben a hibajelzéseket jelezhetjük egy tulajdonságra a Html.ValidationMessageFor() művelet írja ki a jelzett hibaüzenetet a teljes modellre Html.ValidationSummary() művelet írja ki a hibaüzeneteket paraméterben megadhatjuk, hogy az egyes tulajdonságok hibáit is kiírja, vagy csak azokat, amelyekhez nem adtunk meg tulajdonságot (Html.ValidationSummary(true)) ELTE IK, Webes alkalmazások fejlesztése 5:21

Validáció a nézetben pl.: @using (Html.BeginForm()){ <div> @Html.ValidationSummary(true, "Errors:") @* a globálisan jelzett hibák *@ </div> <div> @Html.LabelFor(m => m.username): @Html.EditorFor(m => m.username) @Html.ValidationMessageFor(m => m.username) @* a UserName-re jelzett hiba *@ </div> ELTE IK, Webes alkalmazások fejlesztése 5:22

Validáció a nézetben tag helperek használatával: <form> <div asp-validation-summary="modelonly"> @* a globálisan jelzett hibák *@ </div> <div> <label asp-for="username"></label> <input asp-for="username" /> <span asp-validation-for="username"> </span> @* a UserName-re jelzett hiba *@ </div> Az asp-validation-summary értéke lehet All vagy ModelOnly, utóbbinál az egyes tulajdonságok hibáit is kiírja ELTE IK, Webes alkalmazások fejlesztése 5:23

Validáció a nézetmodellben Lehetőségünk van a nézetmodellen közvetlenül megadni ellenőrzési kritériumokat, automatizálva az ellenőrzést a feltételeket tulajdonságonként szabályozhatjuk, és megadhatjuk a hibaüzenetet (ErrorMessage) megadhatjuk a kötelező kitöltést (Required), szöveghosszt (StringLength), reguláris kifejezést (RegularExpression), intervallumot (Range), összehasonlítást más tulajdonsággal (Compare), illetve speciális formátumot (Url, Phone, CreditCard, EmailAddress, ) a Validation osztály TryValidateObject metódusával az ellenőrzés elvégezhető manuálisan is ELTE IK, Webes alkalmazások fejlesztése 5:24

Validáció a nézetmodellben pl.: public class UserData { [Required(ErrorMessage="User name is required.")] [StringLength(15, "User name cannot be longer, than 15 characters.")] [RegularExpression("^[a-z0-9_-]{3,15}$", "User name has invalid characters.")] // feltételek a felhasználónévre public String UserName { get; set; } // felhasználónév } ELTE IK, Webes alkalmazások fejlesztése 5:25

Kliens oldali validáció A kliens oldali validációt JavaScript segítségével végezzük a legegyszerűbb a jquery Validation programcsomag használata, amely automatikusan kezelni tudja a szerver oldali modellben lévő annotációkat, pl.: <script src="~/lib/jquery/dist/jquery.min.js"> <script src=" /jquery.validate.js"> <script src=" /jquery.validate.unobtrusive.js"> a validáció az űrlap beküldése előtt, még kliens oldalon megtörténik (voltaképpen az annotációk megfelelő módon beépülnek a HTML vezérlőkbe) ELTE IK, Webes alkalmazások fejlesztése 5:26

Kliens oldali validáció production környezeteben célszerű lehet a JavaScript könyvtárak CDN (Content Delivery Network) alapú betöltése, de a másodlagos megoldásként az állomány helyi elérést is megadhatjuk: <script src="https://ajax.aspnetcdn.com/ajax/jquery/ jquery-2.2.0.min.js" asp-fallback-src= "~/lib/jquery/dist/jquery.min.js" asp-fallback-test="window.jquery" crossorigin="anonymous" integrity="{hash}"> </script> ELTE IK, Webes alkalmazások fejlesztése 5:27

Biztonsági ellenőrzések A felhasználó által felvitt adatok kártékony információkat is tartalmazhatnak, ezért biztonsági szempontból is fontos a validálás, a legjellemzőbb támadások: SQL injekció: a szerveren futó SQL utasításokat manipulálja entitásmodell használata esetén nem fordulhat elő cross-site scripting (XSS): szkript kerül feltöltésre a szerverre, amelyet a kliens böngészője futtat a bevitel eleve tiltja a HTML elemeket tartalmazó adatok feldolgozását, de ez kikapcsolható (ValidateInput) az adatok tartalmát megjelenítéskor a Html.Encode utasítással kódolhatjuk, így biztosan nem kerül értelmezésre a szkript ELTE IK, Webes alkalmazások fejlesztése 5:28

Biztonsági ellenőrzések cross-site request forgery (XSRF): a felhasználó átirányítása, és egy kérés végrehajtása a tudta nélkül a felhasználó elküldi az űrlapot tartalommal (POST), anélkül, hogy megadta volna adatait ez elkerülhető, ha megbizonyosodunk róla, hogy a kitöltést és a küldést is ugyanazon kliens végezte ehhez az űrlapban elhelyezünk egy tokent (Html.AntiForgeryToken()), amely információkat közöl a klienssel az akció végrehajtásakor lekérhetjük a tokent (ValidateAntiForgeryToken attribútum), ha a két érték egyezik, akkor nem volt támadás ELTE IK, Webes alkalmazások fejlesztése 5:29

Biztonsági ellenőrzések tag helperek használata esetén az anti forgery token beillesztése az alapértelmezett, annak letiltása kíván külön paraméter beállítást <form method="post" asp-antiforgery="false"> Generált HTML tartalom: <form method="post"> <input name=" RequestVerificationToken type="hidden" value="{token}" /> </form> ELTE IK, Webes alkalmazások fejlesztése 5:30

Példa Feladat: Valósítsuk meg az utazási ügynökség weblapjának foglalási funkcióját, azaz egy apartmant kiválasztva legyen lehetőség a foglaló adatival adott hetekre lefoglalni. felveszünk egy új vezérlőt, amely a foglalásokat felügyeli (RentController), a vezérlőben az Index művelet szolgálja ki a GET és POST kéréseket (paramétere az apartman, illetve utóbbinak a megadott adatok) A vezérlőhöz két nézetet veszünk fel: egyikben űrlapban megadjuk az adatokat (Index) egy másikban visszajelezzük, hogy sikeres volt a foglalás (Result), és megadjuk a teljes összeget ELTE IK, Webes alkalmazások fejlesztése 5:31

Példa a foglalás és a foglaló adatait az adatbázisban két külön táblában tároljuk (Rent, Guest) kiegészítjük az entitásmodell osztályait kényelmi funkciókkal (Rent típust az ütközésdetektálással, Apartment típust a hét napjának lekérdezésével) az adatokat egyszerre szeretnénk bekérni, így létrehozunk egy nézetmodell osztályt (RentViewModel) a megjelenítéshez és validációhoz annotációkat használunk a RentViewModel osztályban minden megadott adatot ellenőrzünk, mielőtt mentenénk, amíg nem hibátlan a kitöltés, visszairányítjuk a kitöltő oldalra (és megjelenítünk egy hibaüzenetet is) ELTE IK, Webes alkalmazások fejlesztése 5:32

Példa elvégezzük kliens oldalon is a validációt, a dátum ellenőrzéséhez használjuk a nemzetközi csomagot (_Layout.cshtml) az aktuális nyelvi beállítást elkérhetjük a nézettől (Culture tulajdonság) az XSRF támadások ellen is védjük az oldalt a megfelelő helyeken (Rent/Index.cshtml, RentController) a hét napja, illetve a tengerpart típusa speciális megjelenítést igényelnek több oldalon, ezért egy-egy parciális nézetet (DayOfWeekDisplay, ShoreTypeDisplay), definiálunk és használunk ezek a megjelenítésére ehhez a megfelelő entitásosztályokat is kiegészítjük ELTE IK, Webes alkalmazások fejlesztése 5:33

Példa a vezérlőkben található üzleti logikát célszerű kihelyezni külön osztályba, legyen ez a TravelService biztosítja a kapcsolatot a perzisztenciával, az adatok lekérdezését, a foglalás végrehajtását az adatok ellenőrzését is elvégzi, a műveletek logikai értékkel, vagy hibakóddal térnek vissza (pl. RentDateError) egy segédosztály (RentDateValidator) ellenőrzi a dátumokat ELTE IK, Webes alkalmazások fejlesztése 5:34

Példa Tervezés (adatbázis): Apartments Buildings Rents Column Name Id ApartmentId EndDate StartDate UserId Condensed Type int int datetime2(7) datetime2(7) int Cities BuildingImages Guests Column Name Condensed Type Id int Address nvarchar(max) Email nvarchar(max) Name nvarchar(max) PhoneNumber nvarchar(max) UserName nvarchar(max) UserPassword varbinary(max) ELTE IK, Webes alkalmazások fejlesztése 5:35