Upload
ivana-anavi
View
67
Download
6
Embed Size (px)
DESCRIPTION
educational material
Citation preview
O predmetu
• kratica: PIN• 5 ECTS bodova• Opis predmeta:
Razvoj dinamičkih web aplikacija. Značenje modela podataka uInternet aplikacijama. Poslužiteljski orijentirani skriptni jezici.Programiranje ASP i ASP.NET, ADO i ADO.NET . Troslojnaarhitektura Internet aplikacija . Sigurnost podataka i kripto-zaštita uporabom XML-a na klijent strani. Izrada Web aplikacijeod modela podataka do Web sučelja koristeći MS SQL Server,HTML, JavaScript, ASP, XML tehnologije. Problemi podrškerazličitih web preglednika.
VSITE
Organizacija predmeta
• 2 kolokvija, izlazni blicevi• laboratorijske vježbe - bit.ly/pinlab1112• na prva dva roka je moguće ispraviti 1 kolokvij• kasnije se polaže cijeli ispit• bit će programiranja• očekuje se rad i vježbanje kod kuće• za uspješno pohađanje i shvaćanje ovog predmeta potrebna
su predznanja:o s MUP-a (HTML, JavaScript, XML)o baze (kreiranje tablica, SELECT, INSERT, UPDATE,
DELETE, primarni i strani ključevi)o osnove programiranja (if, for, do-while, varijable, objekti,
funkcije, ...)
VSITE
Kako položiti?
• aktivno sudjelovati na predavanjima (bit će puno primjera)o razmišljatio raditi bilješke (ovi slide-ovi ne sadrže sve što morate
znati)o čim nešto nije jasno, pitajteo nemojte zaostajati s učenjem jer je gradivo povezano
• doma proučiti primjere s predavanja (svaki tjedan)o ako nešto nije jasno, pogledati još jednom slide-oveo ako još uvijek nije jasno, pitati Google, Bing,
DuckDuckGo, ...o poslati mail na [email protected]
• samostalno rješavati laboratorijske vježbeo gotovo sve odgovore ćete dobiti na predavanjimao na kraju labosa, imat ćete skoro funkcionalni web shop
VSITE
Materijali
• prezentacije sa predavanja (postoje i stare na forumima, alisu outdated 2003/2004 http://ww2.vsite.hr/?q=node/1920)
• bilo koja knjiga o ASP.NET• Google is your friend• http://www.asp.net/ (ima i video tutoriala)• http://stackoverflow.com/• http://stackoverflow.com/questions/194812/list-of-freely-
available-programming-books
VSITE
Sadržaj predmeta
1. Klijent - server arhitektura2. Web server i Web aplikacija3. ASP.NET 4.0• uvod u C#• code-behind, kontrole, postback, querystring, events,
session, cookies• spajanje na bazu (CRUD)• MVC
VSITE
Klijent - server arhitektura
• distribuirana aplikacija• server dijeli svoje resurse klijentima• klijent ne dijeli svoje resurse• klijent od servera zahtijeva sadržaj ili obavljanje neke
funkcije• obično komuniciraju preko računalne mreže (mogu biti i na
istom stroju)• klijent inicira komunikaciju, a server čeka zahtjev
VSITE
Web server• računalo (ili više njih) i software za distribucija sadržaja• pristupa mu se preko Interneta ili intraneta• najčešće se koristi za serviranje web stranica, tj. HTML
dokumenta - statičke HTML stranice• još servira i slike, CSS, skripte, video sadržaj, ...• klijent je najčešće web preglednik (browser)• web preglednik i web server komuniciraju preko HTTP(S)• većina web servera podržava izvršavanje skripti i programa
(server-side scripting), npr. ASP ili PHP• to znači da se HTML dokumenti mogu generirati "on-the-fly"
- tkz. dinamičke stranice
VSITE
Web serverVSITE
HTTPVSITE
• Hypertext Transfer Protocol• služi za komunikaciju između klijenta i servera• fukcionira na principu zahtjev - odgovor (request -
response)• HTTP resurs je mjesto na mreži identificirano sa URL-om
(uniform resourse locator) - počinje sa http://• zajedno sa HTML-om tvore mrežu međusobno povezanih
dokumenata, tj. World Wide Web• originalna verzija HTTP/1.0 je koristila posebnu konekciju
za svaki resurs• HTTP/1.1 može jednu konekciju koristiti više puta• postoji 9 glagola (verb) s kojima se vrše akcije na
resursima: HEAD, GET, POST, PUT, DELETE, TRACE,OPTIONS, CONNECT, PATCH
HTTPVSITE
~ $ telnet www.vsite.hr 80Trying 193.198.56.131...Connected to NS1.vsite.hr.Escape character is '^]'.GET / http/1.1Host: vsite.hr
HTTP/1.1 200 OKDate: Sun, 09 Oct 2011 11:00:06 GMTServer: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8gX-Powered-By: PHP/5.2.6-1+lenny13Expires: Sun, 19 Nov 1978 05:00:00 GMTLast-Modified: Sun, 09 Oct 2011 11:00:06 +0000Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0ETag: "1318158006"X-Generator: Drupal 7 (http://drupal.org)Vary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charset=utf-8
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN""http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/...<link rel="shortcut icon" href="http://vsite.hr/sites/default/files/V_24x26.png" type="image/png" /><meta name="Generator" content="Drupal 7 (http://drupal.org)" /><link rel="alternate" type="application/rss+xml" title="Visoka škola za informacijske tehnologije RSS"href="http://vsite.hr/?q=hr/rss.xml" />
<title>Visoka škola za informacijske tehnologije | Studiraj IT</title> ...
HTTP serveriVSITE
• HTTP serveri obično čekaju zahtjev na portu 80• HTTP serveri moraju implementirati GET, POST i
OPTIONS glagole• GET - dohvaća neki resurs - ne bi se smjela napraviti bilo
koja druga akcija osim dohvaćanja• POST - šalje podatke na procesiranja (npr. sa HTML
forme); može rezultirati stvarenjem novog ili promjenompostojećeg resursa
• kasnije ćemo još pričati o POST i GET• OPTIONS - vraća listu HTTP glagola koje server podržava
HTTP - statusni kodovi odgovoraVSITE
• prva linija odgovora (response) se zove statusna linija(status line)
• statusna linija sadrži informaciju koji klijent koristi zaprikazivanje odgovora
• lista češćih odgovora:o 200 OK - uspješan HTTP zahjevo 301 Moved Permanatly - redirekcija na novi URLo 400 Bad Request - zahtjev sa krivom sintaksomo 401 Unauthorized - kriva autentikacijao 403 Forbidden - dobar zahtjev, ali server ne želi
odgovoriti (ni autentikacija neće pomoći)o 404 Not Found - resurs nije nađeno 500 Internal Server Error - generička greškao 503 Service Unavailable - server je privremeno
nedostupan
HTTP - protokol bez stanjaVSITE
• čim se dohvate svi resursi, prekida se veza sa serverom• HTTP server ne prati informacije i statuse o svojim
klijentima• web aplikacije nekad (tj. često) trebaju pratiti korisnika
preko više stranica (requesta), npr. korisnik stavlja višeartikala u košaricu
• taj problem se obično rješava upotrebom kolačića(cookies), server side sesijama (sessions), skrivenimvarijablama (na formi), prepisivanjem URL-ova, čak ibazama podataka.
HTTPS - HTTP SecureVSITE
• sigurna verzija HTTP protokola• koristi SSL/TLS za ekripciju poruka• također, pruža identifikaciju web servera• koristi se za plaćanja i za osjetljive informacije• obično koristi port 443• HTTPS URL-ovi počinju sa https://
IISVSITE
• Internet Information Services (prije Server)• drugi najpopularniji web server (iza Apache-a)• radi na Windowsima, tj. integralni dio Windows Server
linija• može se uključiti na nekim verzijama XP, Viste i 7 (turn
windows features on and off) -http://learn.iis.net/page.aspx/28/installing-iis-7-and-above-on-windows-vista-and-windows-7/
• postoji i Express verzija• podržava ASP web framework (po defaultu)• također, podržava i FastCGI protokol koji omogućava
programima komunikaciju sa Web serverom• to znači da se na njemu mogu izvoditi skripte (u teoriji) u
bilo kojem programskom jeziku koji ima napisane bingingeza FastCGI (većina), npr. PHP, Java, Python, Ruby, ...
Apache HTTP ServerVSITE
• najpopularniji Web server, besplatan• radi na većini operacijskih sustava (najčešće je instaliran
na Linuxu)• postoji dosta modula koji proširuju osnovnu
funckionalnost, npr. mod_php, mod_perl, mod_python,mod_fastcgi, mod_ssl, mod_gzip, mod_rewrite, ...
• LAMP - Linux, Apache, MySQL, PHP (Perl/Python) - skupbesplatnog softwera za izradu generičkog web servera
• obično je Linux hosting jeftiniji od Windows hostinga• XAMPP - paket koji na Windowsima instalira Apache,
MySQL, PHP i Perl• upozorenje za labose: oba servera koriste port 80 i 443
(po defaultu) tako da ne mogu u isto vrijeme raditi na tomportu (također, nekad se Skype smjesti na port 80)
Razvojna i testna okolinaVSITE
• razvoj web aplikacija se obično radi na lokalnom računalu• spaja se na testnu bazu• kada se doda željena funckionalnost, kod se commita u
bazu koda (CVS)• na neutralnom lokalnom mjestu se provjeri se da prolaze svi
testovi• tek onda se promjene šalju na produkcijski server - publish• prednost web aplikacije da se vrlo lagono mogu ispravljati
bugovi, ali isto tako se vrlo lagano mogu dodavati novi (svimklijentima)
• treba biti vrlo oprezan kod stavljanja nove verzije na server• da bi se izbjegle dodatne greške kod postupka objave
(publisha), treba napraviti skriptu koja uvijek radi jednakipostupak, tj. one step publish (build)
• http://www.joelonsoftware.com/articles/fog0000000043.html
Razvojni alatiVSITE
• za ovaj predmet smo odabrali smo Windows razvojnuokolinu
• ASP.NET kao aplikacijski framework• SQL Server Compact ili Express 2008 kao besplatna baza
podataka• Visual Web Developer Express 2010 za IDE (naravno,
poslužit će i ostale inačice Visual Studia)• najlakše ih je instalirati preko Web Platform Installera -
http://www.microsoft.com/web/downloads/platform.aspx• P.S. uz Visual Studio, Microsoft daje još jedan alat zvan
Web Matrix, jednostavan i za početnike
Web forme
• na MUP-u smo naučili kako se u HTML-u rade forme zakorisnički unos
• naučili smo i da se te forme mogu slati nekom serveru(action) pomoću dvije metode (method)o GETo POST
• sada ćemo naučiti kako server čita taj unos i odgovaradinamičkom stranicom - konačno!
• prvo ćemo napraviti primjere u Classic ASP-u i PHP
VSITE
POST i GET (ASP)
student.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>
<title>Student</title></head><body>
<div><form id="student" method="post" action="pozdrav.asp">
<p>Ime: <input type="text" id="ime" name="ime" /></p><p>Prezime: <input type="text" id="prezime"
name="prezime" /></p><p><input type="submit" value="Pošalji" /></p>
</form></div>
</body></html>
pozdrav.asp (classic asp)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>
<title>Pozdrav</title></head><body>
<div><%
response.write("Pozdrav, " & request.form("ime") & " " &request.form("prezime"))
%></div>
</body></html>
• ako formu pošaljemo sa GET, za čitanje na serverskojstrani koristimo request.querystring
VSITE
POST i GET (PHP)
student.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>
<title>Student</title></head><body>
<div><form id="student" method="post" action="pozdrav.php">
<p>Ime: <input type="text" id="ime" name="ime" /></p><p>Prezime: <input type="text" id="prezime"
name="prezime" /></p><p><input type="submit" value="Pošalji" /></p>
</form></div>
</body></html>
pozdrav.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>
<title>Pozdrav</title></head><body>
<div><?php
print "Pozdrav, " . $_POST["ime"] . " " . $_POST["prezime"]?>
</div></body></html>
• ako formu pošaljemo sa GET, za čitanje na serverskojstrani koristimo $_GET
VSITE
POST i GET zaključak• vrlo sličan kod i za ASP i PHP• kod POST-a, vrijedosti forme se šalju u tijelu HTTP zahtjeva
o običan korisnik ih ne vidi nigdje na ekranuo može se poslati gotovo neograničen količinu podataka
• kod GET-a, vrijednosti forme se šalju preko URL-ao parametri su vidljivi u URL-u - takav URL se može staviti
u bookmark ili poslati mailomo veličina je ograničenao URL se sastoji: od dijela koji piše pod action ? parovi imena i vrijednosti odvojenih s = & koji razdvaja parove
http://primjer.com/pozdrav.asp?ime=Pero&prezime=Peri%C4%87
VSITE
ASP.NET
VSITE
ASP.NET
• Microsoftova tehnologija (web framework) za kreiranjedinamičkih stranica
• stranice mogu biti pisane u bilo kojem .NET jeziku (trenutnostanje: 70% C#, 30% VB.NET)
• posrednik između web servera i .NET klasa• ASP.NET stranice vraćaju validan HTML klijentima• 3 dijela:
o Web Forms (ovo ćemo raditi)o MVC - Model View Controllero Web Pages - nova jednostavna tehnologija namjenjena
početnicima (koristi Razor sintaksu)
VSITE
Visual Studio 2010
• 2 načina za strukturiranje web site-a:o web site project svi file-ovi unutar web-site direktorija se smatraju
dijelom projekta stranice se kompajliraju neovisno što znači, dovoljno je spremiti kod i osvježiti stranicu
preglednika da bi se vidjele promjene ovo ćemo koristiti na predavanjima
o web aplication project kreiraju se solution i project file u zasebnim
direktorijima u project file-u je zapisano koji file-ovi su dio projekta sve stranice se kompajliraju u jedan DLL
VSITE
Prva ASP.NET stranica
• sastoji se od 2 dijelao markup - statički HTML pomiješan sa Web kontrolama
(.aspx file)o server-side kod - sadrži kod napisan u nekom .NET jeziku
(obično C# ili VB .NET)može biti dio .aspx file-a ili poseban .cs ili .vb file
• ASP .NET sadrži pregršt Web kontrola koje prožaju različitefunkcionalnosti
• dodaju se na stranicu double-clickom ili drag & drop izToolbox-a
VSITE
Server-side kod
• klasa koja sadrži event handler-e (rukovatelj događaja)o page-level - izvršavaju se kod događaja na stranici; npr.
svaki puta kod je stranica posjećena, izvršava se Loaddogađaj (event) to znači, da se unutar Page Load handlera može
izvesti neki kod svakog otvaranja straniceo web kontrola - web kontrola može izazvati događaj npr., Button Click događaj se pojavi kad korisnik klikne
na button
VSITE
Server-side procesiranje
• kad se posjeti ASP .NET stranica, samo HTML se vraćaklijentu
• Web kontrole se renderiraju u odgovarajuće HTML elemente• server-side kod se ne šalje klijentu• da bi se server-side kod izvršio, klijent mora napraviti
zahtjev prema serveruo ovo se može napraviti na 3 načina: promjenom URL adrese (upisivanje adrese u
preglednik, klik na link, redirect) forma se šalje klikom na submit button client-side JavaScript se izvršava koji šalje formu
VSITE
Postback
• postback forma je forma koja koristi method="post" i šaljekorisnika NATRAG (BACK) na istu stranicu, tj. action jejednak URL-u od trenutne stranice
• mnoge web kontrole mogu imate server-side događaje(evente), tj. kod koji se izvršava kod tog događaja
• ti događaji okidaju samo kod postback-a• već smo spominjali, Page Load event okine kod svakog
učitavanja straniceo Page objekt ima svojstvo (property) Page.IsPostBack
kojim se određuje da li se dogodio postback ili smo prviput na stranici
• nekoliko Web kontrola imaju AutoPostBack svojstvo(property) koji govori da li se postback događa automatskikod promjene stranja kontrole
VSITE
Najčešće web kontrole
• 3 vrste web kontrolao za prikazivanje teksta - Literal, Labelo za prihvat korisničkog unosa - TextBox, CheckBox,
RadioButton, DropDownList, ...o CRUD na bazi - GridView, DetailsView, FormView, ...
• svaka web kontrola se renderira na klijentu kao odgovarajućiHTML elemento TextBox se pretvara u <input type="text" .../>o Button u <input type="submit" .. />o Label u <span ... />
VSITE
Lista web kontrola
Zajednička svojstva web kontrola
• ID - jednoznačno identificira kontrolu• EnableViewState - da li kontrola čuva stanje (kasnije ćemo o
tome)• Visible - da li je vidljiva• BackColor, BorderColor, BorderStyle, BorderWidth• CssClass - ime CSS klase u renderiranom HTML elementu• Enabled - da li radi ili je "zasivljena"• Font• ForeColor• Height/Width
VSITE
Web forme i postback
• ASP.NET stranice komuniciraju s koristikom preko webformi
• web forma je server-side kontrola koja se renderira kaopostback forma
VSITE
<form id="form1" runat="server">...
</form>
<form name="form1" method="post"action="Default.aspx"
id="form1"><div>
<input type="hidden" name="__VIEWSTATE"id="__VIEWSTATE" value="viewStateVrijednost" />
</div>
... rendenirani rezultat web kontrola
<input type="hidden" name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="eventValidationVrijednost" />
</form>
Web forme i postback
• kad korisnik pošalje (submit) formuo browser ponovno zatraži istu stranicuo šalju se sve vrijednosti sa forme (uključujući i hidden
elemente)o životni ciklus (lifecycle) ASP.NET
stranice se ponavlja okine se Page Load događaj okinu se događaji web kontrola stranica se renderiraHTML se šalje natrag klijentu
VSITE
HTML kontrole i njihove vrijednosti
• na običnoj HTML stranici sa textboxom i submit buttonom,korisnik upiše nešto i pošalje formu
• dogodi se postback, ali kod odgovora, textbox je prazano vraća samo originalni HTML kod
• kod ASP.NET stranica, web kontrole zapamte svojuvrijednost kod postbackao ASP.NET engine POSTom dobije vrijednosti tih kontrola
(npr. text u text box-u ili kvačicu u check box-u)o kod renderiranja odgovarajućih HTML kontrola, ako je
moguće, podesi se vrijednost (value) tih kontrolao to se događa prije Page Load u dijelu koji se zove
Initialization
VSITE
ViewStateVSITE
• neka svojstva se mogu i programski mjenjati (npr. bojakontrole)
• takva svojstva se mogu pamtiti kroz nekoliko postback-ovau ViewState-u
• svaka takva promjena vrijednosti svojstva se pišu u hiddenpolje
• u ViewState-u se ne sprema vrijednost kontrola• upozorenje: pretjerana upotreba ViewState-a može dovesti
do "teških" stranica• u ViewState-u se mogu pamtiti i bilo koje druge,
programerski definirane vrijednosti:o ViewState["daj_mi_ime"] = neka_vrijedost; //pisanjeo (tip_objekta)ViewState["daj_mi_ime"] // čitanje
Master stranica
• prvo se definiraju te fiksne zone na master stranici (menu,header, footer, ...)
• gdje god želimo promjenjivo mjesto, dodajemoContentPlaceHolder (može ih biti više od jedan) - svaki imaID
• na običnim stranica dodajemo Content elemente kojireferenciraju ContentPlaceHolderID
VSITE
CookiesVSITE
• mali tekstualne datoteke na klijentskim računalima (baš nakorisnikovom hard disku)
• cookie (kolačić) može sadržavati informacije koje webaplikacija čita kod svakog posjeta
• ako web aplikacija zapiše cookie, browser taj cookie šaljekod svakog idućeg zahtjeva prema toj aplikaciji
• u njima se obično pamte podaci o korisniku, npr.:o lista TV programa koji zanimaju korisnikao podatak da li je korisnik već ispunio anketuo korisničko ime (korisnik ne treba ponovno unositi
korisničko ime i lozinku - remember me on thiscomputer)
• neka ograničenja: 4096 byte-ova, 20 cookie-a po site-u,korisnik može zabraniti (ili obrisati) cookie na svomračunalu
CookiesVSITE
• pisanje:Response.Cookies["korisnickeInformacije"]["korisnickoIme"] = "Mirko";Response.Cookies["korisnickeInformacije"]["zadnjiPosjet"] = DateTime.Now.ToString();Response.Cookies["korisnickeInformacije"].Expires = DateTime.Now.AddDays(1);ili:HttpCookie aCookie = new HttpCookie("korisnickeInformacije");aCookie.Values["korisnickoIme"] = "Slavko";aCookie.Values["zadnjiPosjet"] = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);
• čitanjeif(Request.Cookies["korisnickeInformacije"] != null){ Label1.Text = Server.HtmlEncode(Request.Cookies["korisnickeInformacije"]["korisnickoIme"]);Label2.Text = Server.HtmlEncode(Request.Cookies["korisnickeInformacije"]["zadnjiPosjet"]);}
SessionStateVSITE
• omogućava spremanje i čitanja podataka o pojedinomkorisniku kako on koristi web aplikaciju (na svimstranicama) - npr. stvaranje košarice s proizvodima
• globalne varijable po korisniku na svim stranicama webaplikacije
• ASP.NET session identificira zahtjeve iz istog preglednikau ograničenom vremenskom periodu
• za identifikaciju pojedinog korisnika, koristi se session ID• session ID se pamti (po defaultu) u non-persistant, tj.
session cookie-u - briše se automatski briše kodzatvaranja browsera/taba ili nakon 20 minuta (po defaultu)
• može se slati i preko URL-a (cookieless) - problem kodslaja linkova (2 korisnika imaju isti session ID)
if (Session["logiranKorisnik"] != null) {lblKorisnik.Text = Session["logiranKorisnik"].ToString(); }
SessionStateVSITE
• session modes:o InProc - podaci se čuvaju unutar ASP.NET procesao SqlServer - session podaci u bazio StateServer - u posebnom procesu; korisno kod web
farmi, a i s ovim session preživi restart applicationservera
o Custom - custom state providero Off - session state ne radi
<configuration> <system.web> <sessionStatemode="SQLServer" sqlConnectionString="IntegratedSecurity=SSPI;data source=NekiSqlServer;" /></system.web> </configuration>
Application StateVSITE
• globalne varijable zajedničke svim korisnicima, tj. globalnikey - value dictionary dostupan sa svim stranica webaplikacije
Application.Lock(); Application["PageRequestCount"] =((int)Application["PageRequestCount"])+1;Application.UnLock();
Application StateVSITE
• globalne varijable zajedničke svim korisnicima, tj. globalnikey - value dictionary dostupan sa svim stranica webaplikacije
Application.Lock(); Application["PageRequestCount"] =((int)Application["PageRequestCount"])+1;Application.UnLock();
Global.asax
• mjesto gdje se obrađuju (handlaju) globalni događaji naaplikacijio Application_Start - okida kod prvog startanja aplikacijeo Session_Start - kod startanja korisničke sesijeo Session_End - kod zatvaranja sesijeo Aplication_End - kod zatvaranja aplikacijeo Application_Error - kod neobrađene greškeo ...
VSITE
Baza podataka
• gotovo svaka web aplikacija se spaja na bazu podataka• ASP.NET radi s većinom modernih baza
o Microsoft SQL Server (2008, 2005, 2000, ...)o Oracleo Accesso bilo koja OLE-DB ili ODBC
• mi ćemo koristiti SQL Server 2008 Compact ili Express• lagano ponavljanje baza
o kreiranje tablicao primarni ključevio strani ključevio osnovni upiti: SELECT, INSERT, UPDATE, DELETE
VSITE
Kontrole za rad s bazom
• SqlDataSource kontrola - služi kao proxy za rad s podacima;ne prikazuje podatke, samo ih pripremi
• podaci dobiveni u SqlDateSource-u se mogu vezati(DataBind, DataSource) na razne druge kontrole za prikaz,izmjenu, brisanjeo GridView - tablični prikazo ListView - koristi predloške za prikazo DetailsView - prikaz jednog rekordao FormView - prikaz jednog rekorda uz predloške
VSITE
ADO.NET
• ActiveX Data Object for .NET• za pristup bazama podataka• za spajanje na bazu, koriste se data provideri
o System.Data.SqlCliento System.Data.Oledbo Microsoft.Data.Odbco System.Data.OracleCliento System.Data.SqlServerCeo itd
• kod uspostavljanja konekcije na određenu bazu, potrebno jedati ConnectionString
• baze imaju različite connection stringove - popisna http://www.connectionstrings.com/
VSITE
ADO.NET - primjer
• u web.config:<configuration>
<connectionStrings><add
name="FaksConnectionString" connectionString="DataSource=|DataDirectory|\faks.sdf"providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings> ....• u ...cs
string connString =System.Web.Configuration.WebConfigurationManager.ConnectionStrings["FaksConnectionString"].ConnectionString;
VSITE
ADO.NET - primjer
SqlCeConnection conn = new SqlCeConnection(connString);conn.Open();SqlCeCommand command = new SqlCeCommand("SELECT *FROM student WHERE pbr=@pbr", conn);command.Parameters.AddWithValue("pbr", 10000);SqlCeDataReader dr = command.ExecuteReader();txtStudenti.Text = "";while (dr.Read()){
txtStudenti.Text += dr[0] + " " + dr["ime"] + " " + dr["prezime"]+ " "+ dr["pbr"] + "\n";}dr.Close();conn.Close();....
VSITE
ADO.NET - primjer
command = new SqlCeCommand("SELECT COUNT(*) FROMstudent", conn);int broj = (int)command.ExecuteScalar();txtStudenti.Text += broj.ToString();--------------------------------------------------command = new SqlCeCommand("INSERT INTO student(ime,prezime, pbr) VALUES (@ime, @prezime, @pbr)", conn);command.Parameters.AddWithValue("ime", txtIme.Text);command.Parameters.AddWithValue("prezime",txtPrezime.Text);command.Parameters.AddWithValue("pbr", txtPbr.Text);command.ExecuteNonQuery();conn.Close();......
VSITE
Registracija korisnika
• forma za registraciju se sastoji od kućice za korisničko ime inajčešće 2 kućice za lozinku (neki web servisi imaju i jednu,npr. tumblr.com)
• u bazi se lozinka ne bi smjela pamtiti kao čisti teksto korisnici često koriste istu lozinku na više servisa (auto
forum i PayPal)• lozinku treba "hashirati", tj. provući je kroz neki hash
algoritam• svojstva takve hash fukcije:
o lozinka na ulazu u producira drugačiji niz znakova (ili broj)na izlazu iz hash funkcije
o nemoguće (ili jako teško) je iz hashirane lozinke dobitinatrag originalnu lozinku
• kod provjere korisničkog imena i lozinke, treba hashiratilozinku koju je korisnik unio i usporediti je s zapisanomhashiranom lozinkom u bazi
VSITE
Registracija korisnika
• najpoznatije hash funkcijeo CRC, MD5, SHA1, SHA256, ...
• dosta stranica na Internutu koristi MD5 što više nije dovoljno• rainbow table (dugina tablica) -
o unaprijed izračunate hash vrijedosti za sve mogućepermutacije (do neke duljine) slova, brojki, znakova
o također za kombinacije riječi iz rječnikao što je lozinka veća, manja je vjerojatnost da je njezina
vrijednost u toj tablici• kao zaštita od napada rainbow tablicama, koristi se SALT
VSITE
Registracija korisnika
• SALTo slučajno generiran broj znakova koji se dodaje na lozinku
i onda se zajedno s njom hashirao druga varijanta je da se SALT dodaje na hashiranu
lozinku i onda se još jednom zajedno hashirao zapisuje se u bazu kraj hashirane (i slane) lozinke
string lozinka = "lozinka";Random r = new Random(DateTime.Now.Millisecond);string salt = r.Next().ToString();string hashiranaLozinka = Util.SHA256(lozinka);string hashiranaISlanaLozinka = Util.SHA256(salt +hashiranaLozinka); //ovo se sprema u bazu
VSITE
SQL injection
• napad na loše dizajnirane (programski) web site-ove• uz nekakvo normalno ponašanje, na bazi se izvršava
napadačev SQL kod• npr:
o sql = "SELECT * FROM korisnici WHERE name = '" +korisnickoIme + "';"
o napadač vrlo jednostavno može dobiti listu svih korisnikaupisujući (u kućicu za unos imena): ' or '1'='1 ' or '1'='1' --' itd.
o SELECT * FROM users WHERE name = '' OR '1'='1' -- ';
VSITE
SQL injection - obrane
• nikad ne vjerovati korisnikovom unosu - validirati na klijentu iserveru, escape-ati korisnički unos
• koristiti parametrizirane query-e• koristiti store-ane procedure• koristiti ORM
VSITE
ORM• Object Relationship Mapper - tehnika za pretvaranje
elemenata baze podataka u neki objektno orjentirani jezik• za .NET su najpopularniji:
o Entity Frameworko Linq to SQLo NHibernateo LLBL Gen
• prednosti ORM-a:o rade s više baza - lagana migracijao sigurnost tipova podataka (type safety)o debugiranje, apstrakcijao objavljivanje (jedan DLL)
• prednosti sprocs:o mrežni prometo nema rekompajliranjao puna snaga SQL-a
VSITE
Entity Framework• Microsoft-ov preporučeni ORM sustav• Počiva na ADO.NET-u• Moguće ga je koristiti sa raznim bazama podataka• Podržan od Visual Studio-a (2010 i dalje) – omogućeno
automatizirano stvaranje modela iz baze podataka (EDM -Entity data model)
• U VS-u odabiremo novu komponentu ADO.NET EDM ->Generate from database i kreiraju se objekti koji odgovarajutablicama baze
• Olakšano spremanje i mijenjenje podataka, ne koristi seSQL izrazi prilagođeni pojedinoj bazi
VSITE
Entity Framework – prikaz dizajnaVSITE
Entity Framework - LINQ• Za dohvat podataka najviše se koristi LINQ(Language-
Integrated Query) to entities• LINQ je MS tehnologija koja integrira sa .NET-om kreiranje
upita prema raznim izvorima podataka ()• Definira sintaksu sličnu SQL-u pomoću koje .NET
komponente dohvaćaju podatke (XML datoteke, kolekcijeobjekata, relacijske baze...)
• Za dohvat podataka pišemo upite tipa:from p in db.Productswhere p.Active == trueselect new {ID = p.ProductID,Name = p.ProductName}
VSITE
ASP.NET MVC• MVC ( Model-View-Controller) je obrazac koji radi lakšeg
razvoja i održavanja web aplikacija razdvaja tri odvojenekomponente
• Model – Opisuje dio za manipulaciju podacima – uključujedata Model (najčešće ORM kao što je Entity Framework),CRUD operacije, poslovna pravila aplikacije
• View – određuje vizualni dio dakle dizajn stranica,prezentaciju podataka i kontrole za interakciju sa korisnikom
• Controller – poveznica ili most između Model i Viewkomponenti, prihvaća zahtjeve za stranicama, aktivirapotrebne operacije modela i kreira View – dakle webstranicu koju vidi korisnik, brine o sigurnosti itd...
• U VS-u kreiramo novu aplikaciju po ASP.NET MVCtemplate-u, kreiraju se osnovne MVC komponente koje daljeprilagođavamo zahtjevima aplikacije
VSITE