1 / 53

Aplikační programové vybavení

Aplikační programové vybavení. Webové aplikace. Webová aplikace. Rozdíly oproti webové stránce : interaktivní řádově vyšší počet požadavků práce s datovým skladem problémy se souběhem více uživatelů Webová aplikace se skládá z webových stránek Webová aplikace je serverová aplikace

kerry
Download Presentation

Aplikační programové vybavení

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aplikační programové vybavení Webové aplikace

  2. Webová aplikace • Rozdíly oproti webové stránce: • interaktivní • řádově vyšší počet požadavků • práce s datovým skladem • problémy se souběhem více uživatelů • Webová aplikace se skládá z webových stránek • Webová aplikace je serverová aplikace • zahltit server není problém • zahltit server znamená odříznutí všech uživatelů

  3. Webová aplikace • Rozdíly oproti lokální (nesíťové) aplikaci • vzdálený přístup • problémy se souběhem více uživatelů • potíže s uchováváním stavu • závislost na webových prohlížečích • vysoká dostupnost • levnější údržba aplikace

  4. Metadata • Nastavení dat v HTTP hlavičkách: • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8;language=cs"> • nastavení ukládání do cache (mezipaměti) • Nastavení informací pro vyhledávače a prohlížeče: • klíčová slova (keywords) • autor (author) • popis (description) • <meta name=‘kewords’ content="html, sql, php"> • Při nastavování těchto metadat je nutné brát v úvahu, že vyhledávače se brání ovlivňování výsledků. • pro webové aplikace není příliš významné

  5. Webová stránka z pohledu klienta

  6. Webová stránka z pohledu serveru http://mendelu.cz/ http://mendelu.cz/cz http://mendelu.cz/css/rs_base.css http://mendelu.cz/css/jquery/jquery.fancybox-1.2.5.css http://mendelu.cz/img.pl?rscss=86 http://mendelu.cz/js/jquery/jquery.js http://mendelu.cz/css/rs/galerie_pas.css http://mendelu.cz/js/jquery/jquery.fancybox-1.2.5.js http://mendelu.cz/js/rs/galerie_pas.js http://mendelu.cz/img.pl?rsunid=52494 http://mendelu.cz/img.pl?rsunid=52239 http://mendelu.cz/img.pl?rsunid=52257 http://mendelu.cz/img.pl?rsunid=52251 http://mendelu.cz/img.pl?rsunid=52246 http://mendelu.cz/img.pl?rsunid=52241 http://mendelu.cz/img.pl?rsunid=52309 http://mendelu.cz/img.pl?rsunid=52299 http://mendelu.cz/img.pl?rsunid=53312 http://mendelu.cz/img.pl?rsunid=52247 http://mendelu.cz/rs/obrazek.pl?id=4181;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=3463 http://mendelu.cz/img.pl?rsunid=52262 http://mendelu.cz/rs/obrazek.pl?id=4192;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4198;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4200;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4201;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4202;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4203;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4204;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4182;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4184;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4183;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4185;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4186;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4187;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4189;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4190;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4191;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4193;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4194;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4195;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4196;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4197;nahled=1; http://mendelu.cz/rs/obrazek.pl?id=4199;nahled=1; http://www.google-analytics.com/ga.js http://mendelu.cz/rs/obrazek.pl?id=4188;nahled=1; http://www.google-analytics.com/__utm.gif?utmwv=4.6.5&utmn=1111052810&utmhn=mendelu.cz&utmcs=iso-8859-2&utmsr=1920x1200&utmsc=32-bit&utmul=cs&utmje=1&utmfl=10.0%20r45&utmcn=1&utmdt=MENDELU&utmhid=1707450468&utmr=-&utmp=%2Fcz&utmac=UA-7734192-1&utmcc=__utma%3D109547801.1087977834.1270485352.1270485352.1270485352.1%3B%2B__utmz%3D109547801.1270485352.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B http://mendelu.cz/favicon.ico http://mendelu.cz/img.pl?sysid=fancy_shadow_n http://mendelu.cz/img.pl?sysid=fancy_shadow_ne http://mendelu.cz/img.pl?sysid=fancy_shadow_e http://mendelu.cz/img.pl?sysid=fancy_shadow_se http://mendelu.cz/img.pl?sysid=fancy_shadow_sw http://mendelu.cz/img.pl?sysid=fancy_shadow_s http://mendelu.cz/img.pl?sysid=fancy_shadow_w http://mendelu.cz/img.pl?sysid=fancy_shadow_nw 56 HTTP požadavků

  7. Webová stránka z pohledu serveru

  8. Síťová aplikace mendelu.cz embarcadero.com rychlost závisí na neovlivnitelných okolnostech fyzikální omezení přenosu

  9. Deziluze na úvod POST https://example.com/loginProcess HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: example.com Content-Length: 131 Connection: Keep-Alive Cache-Control: no-cache Accept-Language: cs loggedURL=http%3A%2F%2Fexample.com%2Fticket&serviceId=email&forceSSL=0&username=mrkvicka&domain=example.com&password=cibulka&js=1

  10. Cache • Cache = mezipaměť • Při prvním požadavku na webovou stránku je nutné načíst všechny externí soubory. • obrázky, styly, skripty (klientské) • Při dalším požadavku na stránku není nutné stahovat soubory znovu – pravděpodobně se nezměnily. • Cache je dočasná paměť pro uložení webových stránek. • dramatické zvýšení rychlosti načítání • pevný disk nebo RAM • Existuje také sdílená cache – velké organizace, někteří poskytovatelé internetu

  11. HTTP cachování • Systém pro definovaní doby uchovávání stránky (lifetime, time-to-live, ttl) v cache prohlížeče. • První načtení stránky: • 55 požadavků (435 954 B z toho 18872 B stránka) • Druhý požadavek na stránku: • 9 požadavků (2175 B) • Obnovení stránky: • 54 požadavků • http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

  12. HTTP cachování • Hlavička Cache-control • Cache-control: public, max-age=259200 • Cache-control: private, max-age=3600, must-revalidate • Cache-control: private, no-cache, no-store, must-revalidate • Koncept 1 • soukromý vs. veřejný obsah (public × private × no-cache× no-store) • rozhoduje zda uložit nebo neuložit

  13. HTTP cachování • Koncept 2 – vypršení (expiration) • doba platnosti [s]: • max-age=3600 • povinné ověření: • must-revalidate • Koncept 3 – ověření platnosti • Pokud klient požaduje zaručeně čerstvou stránku může odeslat hlavičku (CTRL + F5): • Pragma: no-cache • Server musí buď odpovědět platnou stránkou nebo klienta přesvědčit, že jeho verze je platná (HTTP status 304).

  14. Ověření platnosti • Podle data poslední změny • Server může odeslat hlavičku udávající poslední změnu souboru: • Last-Modified: Wed, 13 Oct 2004 09:43:02 GMT • Klient může ověřit zda došlo ke změně posláním hlavičky: • If-Modified-Since: Wed, 13 Oct 2004 09:43:02 GMT • Podle obsahu • Server může odeslat kód, který se změní při změně obsahu: • ETag: "3fe48-527f-52237c0" • Klient může ověřit zda došlo ke změně posláním hlavičky: • If-None-Match: "38cac-1f34-7333bcc0"

  15. Nastavení cache • Minimalizace objemu přenášených dat mezi serverem a klientem • Ověření platnosti = přenos přibližně 500B • Pro statický obsah je zajištěno automaticky (posílá se Last-modified) • Pro dynamický obsah nutno řešit při generování stránky (ETag) • zejména pro skripty, které vracejí obrázky a velké soubory • U dynamicky generovaných stránek je vhodné zajistit, aby se generovaly jen pokud je to nutné. • snížení zátěže serveru • http://www.fiddlertool.com/

  16. http://www.xkcd.com/

  17. Udržování stavu • přihlášení, stav formuláře, aktuální stránka… • protokol HTTP je nestavový • Z pohledu serveru není mezi jednotlivými požadavky klientů žádná spojitost. • Jedna akce uživatele odpovídá mnoha HTTP požadavkům. • Požadavky jednotlivých klientů se na serveru prolínají. • Udržování stavu webové aplikace je možné několika způsoby. • všechny jsou špatné • a některé ještě horší…

  18. Identifikace podle IP adresy Map of the internet (2006) http://xkcd.com/195/ • většina PC nemá statickou IP adresu • většinu PC používá více jak jeden uživatel • na většině PC je spuštěn více jak jeden program

  19. GET • GET je základní HTTP požadavek • Udržování stavu metodou GET znamená vkládání parametrů do URL. • Není nijak zabezpečeno, adresu je možné podstrčit • Pouze malý objem textových dat (2 048B), bez speciálních znaků (funkce urlencode() ) • K předávání dochází pouze při kliknutí na odkaz nebo odeslání formuláře. • Uživatel může libovolně měnit • http://www.google.cz/search?q=test&hl=cs&start=10&sa=N

  20. POST • POST je jiný způsob odeslání HTTP požadavku, při kterém klient odesílá (post) serveru data. • POST požadavek vzniká pouze při odeslání formuláře (method='post')neboJavaScriptem. • Není nijak zabezpečeno. • Data jsou ve zdrojovém kódu HTML stránky. • Pouze textová data bez speciálních znaků (urlencode()) • Je mírně odolnější proti podstrčení a proti změně ze strany uživatele. • Není univerzální, musí se explicitně zopakovat při každém požadavku.

  21. Cookie • Data pro udržení stavu se ukládají v prohlížeči • nespolehlivé • uživatel může libovolně mazat a měnit • nebezpečné • není šifrováno • přístupné komukoliv • Nastavuje sevypršení cookie souboru • po zavření prohlížeče (dočasný cookie v RAM) • doba platnosti (tj. platné i po zavření prohlížeče, trvalý cookie na HDD) • Do cookie se dají ukládat jen textová data (max. 4096B na doménu), přenáší se při každém požadavku automaticky.

  22. Příklad Cookie • Internet Explorer • %USERPROFILE%\Cookies • Firefox • %USERPROFILE%\Data aplikací\Mozilla\Firefox\Profiles\hash.default\cookies.txt • Opera • %USERPROFILE%\Data aplikací\Opera\Opera\Profile\cookies4.dat • Internet Explorer (www.google.cz): PREF ID=e0e8437d79da2a4e:LD=en:NR=30:TM=1196797760:LM=1196797793:S=I1OK7fzaFXPVH5SQ google.cz/ 1536 3355346560 30045265 3381481456 29898414 *

  23. Session (sezení) • Data pro uchování stavu se ukládají na serveru. • Vzniká problém identifikace klienta • Automatická správa session: • při prvním požadavku server generuje identifikační kód session • vytvoří prostor pro data • identifikační kód zašle klientovi • klient uloží kód do dočasného cookie souboru • s každým požadavkem zašle klient serveru kód session

  24. Session

  25. Session (automatická) • Umožňuje ukládání větších objemů dat i netextových dat. • Data jsou uložena na serveru a přístupná pouze webovému serveru. • Přenáší se pouze identifikační kód (SESSION ID). • Slabým místem je identifikační kód • identifikační kód je možno zcizit nebo podstrčit (session fixation) • po zapomenutí kódu (zavření prohlížeče) je session nepřístupná • Nejpoužívanější způsob ukládání stavu webových aplikací.

  26. Session (automatická) a Web 2.0 • viz příloha • http://akela.mendelu.cz/~xpopelka/cs/apv/ost/session-soubory.pdf • http://akela.mendelu.cz/~xpopelka/cs/apv/ost/session-databaze.pdf • Uchování stavu je nutná podmínka k realizaci zabezpečení

  27. Bezpečnost webové aplikace • Problém 1: • uživatel • Problém 2: • uchování stavu přihlášení, zabránění zcizení stavu • Problém 3: • zabezpečení jména a hesla • Problém 4: • kontrola uživatelských vstupů

  28. Heslo – osvěta • Jméno kočičky není dobré heslo • tedy pokud se kočička nejmenuje XdTg42W • Jakékoliv heslo složené ze slov je slabé • Jakékoliv heslo napsané na nástěnce je slabé • Čím častěji je heslo použité tím je slabší • Pro každou aplikaci musí být jiné heslo → KeePass • Pro srovnání: • slušný jazyk = 250 000 slov • 8 míst = 6 553 600 000 000 kombinací • 10 míst = 10 485 760 000 000 000 kombinací

  29. Přihlášení • autentizace – authentication – ověření identity uživatele • autorizace - authorization – ověření oprávnění uživatele • autentification – zkomolenina authentication • 4 způsoby ověření identityuživatele: • co víte (heslo) • co máte (klíč, certifikát – velmi dobré) • kdo jste (otisk prstu – nepřesné) • co děláte (hlasu, rukopisu – napodobitelné) • 2F (two-factor) ověřování

  30. Přenos hesla

  31. Přenos hesla • Heslo je možné zadat do HTML formuláře • Odesílá se nešifrované (plaintext) v POST požadavku. • Odposlechnutí hesla je jednoduché. • Podstrčení formuláře je jednoduché. • Pro přihlášení je možné využít přihlášení protokolu HTTP • Odposlechnutí hesla je složitější

  32. Přihlášení formulářem • Při přihlášení přes webový formulář se posílá heslo jednorázově (při odeslání formuláře) • po ověření hesla musí server uchovávat stav přihlášení • problém identifikace klienta • různé metody verifikace • kontrolní kódy, časově omezené kódy • není spolehlivé

  33. Request POST https:// example.com /loginProcess HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: example.com Content-Length: 131 Connection: Keep-Alive Cache-Control: no-cache Accept-Language: cs loggedURL=http%3A%2F%2Femail.example.com%2Fticket&serviceId=email&forceSSL=0&username=mrkvicka&domain= example.com &password=cibulka&js=1

  34. HTTP Přihlášení • Při přihlášení pomocí HTTP se heslo odesílá při každém požadavku • je možné uchovávat stav přihlášení • nebo je možné ověřovat jméno a heslo při každém požadavku • heslo je mnohočetným přenosem oslabováno • je nutné kombinovat s šifrováním • umožňuje ukládání Session do databáze • odpadá problém identifikace klienta • 2. nejbezpečnější způsob 1F přihlašování (hned po přihlášení osobním certifikátem)

  35. HTTP Přihlášení • 2 základní varianty: • basic • jednoduché ověřování • heslo se posílá nešifrované • digest • komplexní dvoustranné ověřování • heslo se nikdy neposílá plaintextově • umožňuje ověření integrity stránky • ověřování každého přístupu • braní se opakování požadavku • složitá implementace

  36. HTTP Basic Auth - Request 1 GET /eyen2/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: cs UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Host: example.com Connection: Keep-Alive

  37. HTTP Basic Auth - Odpověd 1 HTTP/1.1 401 Unauthorized Date: Thu, 16 Apr 2009 08:26:07 GMT Server: Apache X-Powered-By: PHP/5.1.6 Set-Cookie: PHPSESSID=05pbojjjidmtu8s94avgp3djo0; path=/ Last-Modified: Thu, 16 Apr 2009 08:26:07 GMT Cache-control: private, no-cache, no-store, must-revalidate Set-Cookie: PHPSESSID=f2rsf9ijsfk97vmifk4pkpajt1; path=/ WWW-Authenticate: Basic realm="Eyen - Amadeo installer" status: 401 Unauthorized Content-Length: 1039 Keep-Alive: timeout=15, max=64 Connection: Keep-Alive Content-Type: text/html;charset=utf-8;language=cs

  38. HTTP Basic Auth - Request 2 GET /eyen2/ HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: cs UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Cookie: PHPSESSID=f2rsf9ijsfk97vmifk4pkpajt1 Connection: Keep-Alive Host: example.com Authorization: Basic bG9naW46bW9qZXRham5laGVzbG8=

  39. Kde je heslo? • base64_decode(‘bG9naW46bW9qZXRham5laGVzbG8=‘); • login:mojetajneheslo

  40. HTTP Digest Auth – Request 1 GET /eyen/ HTTP/1.1 Accept: */* Accept-Language: cs UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Host: example.com Connection: Keep-Alive Pragma: no-cache Cookie: PHPSESSID=3cf24mkcm3u6mb91m65aah8s90

  41. HTTP Digest Auth – Response 1 HTTP/1.0 401 Unauthorized Date: Thu, 16 Apr 2009 08:33:28 GMT Server: Apache/2.2.10 (Win32) DAV/2 mod_ssl/2.2.10 OpenSSL/0.9.8i SVN/1.5.4 PHP/5.2.7 X-Powered-By: PHP/5.2.7 Last-Modified: Thu, 16 Apr 2009 08:33:28 GMT Cache-control: private, no-cache, no-store, must-revalidate WWW-Authenticate: Digest realm="EyenInstaller", qop="auth", nonce="cbf80c608e0ba3bfcaf8ec4d1f3ea0cc", opaque="ceef418ef038687855e6755e91d68b01" Content-Length: 1557 Connection: close Content-Type: text/html;charset=utf-8;language=cs

  42. HTTP Digest Auth – Request 2 GET /eyen/ HTTP/1.1 Accept: */* Accept-Language: cs UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) Cookie: PHPSESSID=3cf24mkcm3u6mb91m65aah8s90 Connection: Keep-Alive Pragma: no-cache Authorization: Digest username="login",realm="EyenInstaller",nonce="cbf80c608e0ba3bfcaf8ec4d1f3ea0cc",uri="/eyen/",cnonce="757efac677e3fe31bb5e4744b212822f",nc=00000001,response="8699a023df2dc7205f51c29a35ad51e0",qop="auth",opaque="ceef418ef038687855e6755e91d68b01" Host: 192.168.1.123

  43. HTTP Digest Auth • nonce – token unikátní pro každé přihlášení • cnonce – unikátní token generovaný klientem • nc – počet použití nonce • response – • $a1_hash = md5($user_name.":".SYS_REALM.":".$password) • $a2_hash = md5($_SERVER['REQUEST_METHOD'].":". $digest['uri']); • $response = md5($a1_hash.":".$digest['nonce'].":". $digest['nc'].":".$digest['cnonce'].":".$digest['qop'].":".$a2_hash); • qop – auth/auth-int – přihlášení/přihlášení + verifikace poslaného obsahu • opaque – kontrolní kód • $opaque = md5(uniqid(rand(), true).SYS_REALM) • http://www.ietf.org/rfc/rfc2617.txt

  44. Šifrování • Šifrovaný přenos je možný pomocí protokolu HTTPS • Funguje jako obálka protokolu HTTP. • Při šifrovaném přenosu zbývá zabránit podstrčení stránky • K ověření pravosti stránky slouží certifikáty • certifikát musí být platný • certifikát musí být vydán pro aktuální server • certifikát musí být ověřen certifikační autoritou • certifikační autorita musí být pravá

  45. Certifikáty • Cílem certifikátu je ověřit pravost subjektu • Každý certifikát musí ověřit certifikační autorita. • Existují i self-signed certifikáty pro testovací účely

  46. Uchování hesla • Pokud se přidá salt, pak prakticky stačí použít jednosměrný kódovací algoritmus • sha1, md5, tth, atd... • dekódování je natolik náročné, že se útočník raději zaměří na jinou část aplikace • Bezpečnější je použít (jednosměrný) šifrovací algoritmus. • Vyžaduje uchování/generování klíče. • Hesla by měla být uložena v DB s vhodně nastavenými oprávněními.

  47. Bezpečnost Aby byl šifrovaný přenos bezpečný, musí být platné certifikáty. Heslo musí být silné, jinak se dá uhádnout a žádné zabezpečení nepomůže. Uživatel musí být ostražitý. 2F zabezpečení je úplně někde jinde než 1F zabezpečení. 2F zabezpečení není zadaní dvou hesel!

  48. http://www.xkcd.com/

  49. Ošetření uživatelských vstupů • Ošetření speciálních znaků při vkládání dat do databáze (pg_escape_string()) • SQL injection • uvozovky, znak #0 • podle DB serveru případně i další • Ošetření speciálních znaků při zobrazování stránky na webu (html_special_chars()) • Cross site scripting (XSS) • HTML značky • Skripty na straně klienta

More Related