1 Jegyzet a Fejlett Webes technológiák előadáshoz A Sysdata támogatásával Bilicki Vilmos december 19.2 23 Tartalomjegyzék 1. Előszó 7 I. A World Wide ...
Eloszó ˝ Néhány szó a WEB, Webes technológia történelmér˝ol: A tudományok fejl˝odésével egyre nagyobb igény mutatkozott a dokumentumok egységes, szakszeru, ˝ átlátható tárolására. A felhalmozódott tudásmennyiség kezelésére egyre kevésbé volt alkalmazható a hagyományos papír alapú megoldás. Vannevar Bush 1945-ben egy nevu˝ tudáskezel˝o rendszert írt le a As We May Think [1] címu˝ cikkében. Theodor Holm Nelson [2] szintén meg˝ használta álmodta az alkalmas dokumentumkezel˝o rendszert. 1965-ben O el˝oször a hypertext kifejezést , melynek definíciója: A hypertext az információ egy olyan összekötött információs csomópontokból álló hálózatának megjelenítése melyeken az olvasó tetsz˝olegesen tud közlekedni, nem lineáris módon is. A napjainkban is használt HTML(HyperText Markup Language)(5) nyelv els˝o verzióját a CERN-ben dolgozó Tim Berners-Lee és Robert Caillau dolgozta ki. Az információ tárolásra, lekérésre a már jól bevált kliens-szerver modellt használták fel. Megjelentek az els˝o Web szerverek és a hozzájuk tartozó Web kliensek. Az átvitelr˝ol a HTTP (2) protokoll gondoskodott. Miért érdekes számunkra a téma? Miért olyan népszeru˝ napjainkban a Webes technológia? Három kulcsszóval jellemezhetjük: • elosztott rendszerek (skálázhatóság) • vékony kliens technológia (minimális adminisztráció) • platform független (heterogén rendszerek együttmuködése, ˝ nem vagyunk egyetlen céghez sem kötve) 7
8
˝ FEJEZET 1. ELOSZÓ
Napjainkban kihasználva a helyi számítógépes hálózat adta lehet˝oségeket a legtöbb alkalmazás igyekszik a többivel együttmuködni ˝ (kisebb, nagyobb sikerrel . . . ). Ezen együttmuködés ˝ a legtöbb esetben kliens szerver alapú. Komoly alkalmazás rendszerek alakulhatnak ki. Pl.: Egy csoportmunka támogató keretrendszer a felhasználók kommunikációján kívül tartlamazhatja az üzleti logikát, feladat elosztást . . . stb. Lehet˝ové válik a felhasználók együttmuködése, ˝ mobilitása, központi adminisztrációja. Egyre komplexebb feladatok megoldása válik lehet˝ové elosztott egymással együttmuköd˝ ˝ o renszerek segítségével. A cégek muködésük ˝ paramétereit folyamatosan nyomon követhetik, optimalizálhatják (ERM, CRM rendszerek). Ezen tulajdonságok jelentik a mozgatóerejét a webesítés nevu˝ folyamatnak melynek keretében egyre több feladat megoldása kerül át webes rendszerek hatókörébe. Ma ezen trend felfutó ágában vagyunk. Egy másik komoly terület mely nem különíthet˝o el teljes mértékben az el˝oz˝ot˝ol az e-commerce, e-business. Olyan alkalmazások, szabványok, technológiák vannak kialakulóban melyek segítségével a vállalatok viszonylag biztonságosan, automatikusan tudnak üzleti tranzakciókat kezelni. (Pl.: egy autógyár számítógépes rendszere automatikusan megrendeli a szükséges alkatrészeket a beszálító rendszerét˝ol mely további tranzakciókat kezdeményezhet. Itt megemlíthetjük az onile banking-et is, melynek keretében banki tranzakciókat kezelhetünk webes rendszereken keresztül.) A jegyzet ezen hatalmas területet próbálja áttekinteni négy részre osztva azt: • Az els˝o részében megismerkedünk a Web alapjaival. Áttekintjük egyrészt az átviteli protokollokat, másrészt megismerkedünk a tartalom megjelenítés módszereivel (HTML(5),XML(7), . . . ). Itt ismerkedünk meg a mobil világot és az Internetet összekapcsoló WAP(9) környezettel is. • A második részben, mely a jegyzet illetve az el˝oadás domináns részét képezi áttekintjük a ma hsznált legfontosabb technológiákat melyek segítségével adatbázisokból, vagy más adatforrásokból dinamikus a felhasználó igényei szerint változó oldalakat állíthatunk el˝o. • A harmadik rész már teljesen a szerver oldallal foglalkozik. Áttekintjük benne a web szerverek legfontosabb jellez˝oit muködésüket ˝ és néhány népszerubb ˝ webszervert. • A negyedik rész önmagában is több jegyzetet lefedhetne. Itt ismerkedünk meg az alkalmazás szerverekkel melyek biztonságos, jól menedzselhet˝o környezetet nyújtanak a szerver oldali programok futtatásához.
I. rész
A World Wide Web alapjai
9
Bevezeto˝ Miel˝ott belemerülnénk a részletekbe érdemes áttekinteni egy webes rend˝ vázlaton, szer felépítését, muködését. ˝ Az 1.1 ábrán látható egyszerusített az adatforgalomra helyeztük a hangsúlyt. Mint említettük a viszony kliens szerver alapú. A kliens kér egy weboldalt a szervert˝ol, mely szerencsés esetben visszaküldi azt. A rendszer természetesen nem ilyen egyszeru. ˝ Az
1.1. ábra. WEB vertikális metszet átvitel folyamán sok mindenr˝ol kell gondoskodni. A különböz˝o rétegek ezen feladatokat megoldására lettek kifejlesztve. Átviteli protokollként a jelenleg leginkább elterjedt TCP/IP protokollt ábrázoltuk, azonban bármely transzparens átvitelt biztosító protokoll megfelel erre a célra. A második réteg (TLS (4)) biztosítja az átvitel biztonságát, megbízhatóságát, titkosságát (amennyiben az alkalmazás igényli ezt. Egy hír portálnál nincs különösebb igény az adatok biztonsága, titkossága iránt, egy online banki tranzakciónál viszont nélkülözhetetlen.). A harmadik rétegként szerepel˝o HTTP (2) minden kapcsolatnál jelen van, gondoskodik a kliens a szerver valamint az esetleges proxy szerverek közötti kommunikációról. A kommunikáció a célja a kliens által kért HTML (5), vagy XML (7) dokumentumok átvitele. Az XML réteg feladata az adatok általános leírása, az adatok megjelenítésér˝ol nem tartalmaz információt. Különálló alkalmazások közötti adatcserére, illetve olyan esetkben szokták alkalmazni amikor a felhasználó több formában szeretné viszontlátni az adatokat (pl.: mobil készülék, pdf, html, . . . stb.) A HTML (5) réteg szerepe az adatok megfelel˝o megjelenítése. A CSS (6) nyelv segítségével megjelenítési stílusokat tudunk definiálni. A szerver oldlal tárolhat statikus HTML fájlokat, ekkor a beérkez˝o kérésre a 11
12 megfelel˝o fájl tartalmát küldi vissza. Gyakorabban találkozunk dinamikus tartalommal, ekkor a szerver adatbázisból, vagy más forrásból a kérés hatására állítja el˝o a HTML oldal tartalmát. A jegyzet els˝o részében az átvitel részleteivel valamint az átviend˝o adat megjelenítésének leírásával foglalkozunk.
2. fejezet
A HTTP protokoll A HTTP (Hyper Text Transport Protocol) egy alkalmazás szintu˝ protokoll az elosztott, egymással együttmuköd˝ ˝ o hypermédia rendszerek számára, mely átviteli protokollként a TCP/IP protokollt alkalmazza. (Használhat mást is, a követelmény csak az, hogy az átvitel transzparens legyen). Mint a legtöbb hálózati protokoll, a HTTP protokoll is a kliens szerver modellt használja.(A HTTP kliens küld egy kérést a HTTP szerver számára, az válaszol és visszaküld egy válasz üzenetet, mely általában tartalmazza a kért információt.) A protokoll állapotmentes, tehát nem nyújt semmilyen információt arról, hogy az adott kliens mikor, melyik oldalt kérte le (a szerver persze nyomon követheti ezt, de a HTTP protokoll nem nyújt ebben segítséget). A
2.1. ábra. A Proxy szerver helyzete felhasználók számának növekedésével arányosan n˝o a hálózat terhelése. A terhelés elosztásának, csökkentésének egyik módja, hogy a kívánt tartalmat 13
14
FEJEZET 2. A HTTP PROTOKOLL
közel visszük a felhasználókhoz. Erre szolgál a proxy szerver, mely segítségével a kérések egy részét le tudjuk kezelni a helyszínen, nem terhelve a nyilvános hálózatot. A helyi felhasználók webes forgalma is rajta keresztül zajlik. Ezt a forgalmat (a lekért weboldalakat) letárolja és a legközelebbi kéréskor a tárolt oldalt küldi vissza a felhasználónak. A HTTP/1.1 [3]-es szabvány igen részletesen tárgyalja a proxy szerverek feladatát, muködé˝ sét. Igen sok beállítási lehet˝oséget biztosít a kliens és a szerver számára egyaránt, hogy az útba es˝o proxy szerverek muködését ˝ befolyásolya. Fontos, például egy dinamikusan változó oldalnál, hogy a proxy folyamatosan nyomon kövesse a változásokat. Egy t˝ozsdei jelentéseket tartalmazó oldalnál például, megengedhetetlen, hogy a kliens ne a legaktuálisabb tartalmat kapja meg, míg egy újságnál, vagy a t˝ozsde oldal díszít˝o grafikai elemeinél nem fontos minden alkalommal az eredetit letölteni. Egy kapcsolat tehát igen sok kiegészít˝o paraméterrel jellemezhet˝o, melyeket a felek el˝oször a kapcsolat felépítésénél állítanak be. Ilyen paraméter például, a használt protokoll verziószáma. Mindig a használható legmagasabb verziószámú protokollok közül választják ki a legkisebb verziószámút. A verziószámba az útban lév˝o proxy szerverek nem szólnak bele. Ha az átviteli protokoll verziószáma magasabb, mint az útba es˝o proxy szervereké, akkor azok átjátszó üzemmódban muködnek. ˝ Miután az üzenetcsere megtörtént a HTTP/1.1-es [3] ajánlás szerint nem bontják le a kapcsolatot. A kapcsolat fenntartási ideje implementáció függ˝o. A HTTP szerver általában a 80-as TCP porton fogadja a kéréseket. A kliens az igényelt tartalmat az ún. URI (Universal Resource Identifier) segítségével címezi meg, mely egy absztrakt vagy fizikai er˝oforrás megcímezésére alkalmas karatersorozat. A pontos felépítését az rfc2396-os [4] IETF[5] ajánlás írja le, melyben a következ˝o felépítés szerepel: <protokoll>:<protokoll specifikus rész>
Az URI leírása nem rögzíti ugyan a protokoll specifikus rész felépítését, azonban a protokollok egy részénél a következ˝o felépítést használják: <protokoll>://<elérési útvonal>?
A címben csak US-ASCII kódolású karakterek egy halmazát használhatjuk, melyben az angol abc kicsi és nagy betui ˝ szerepelnek a számokkal kiegészítve. Amennyiben olyan karaktert szeretnénk használni, ami nem szerepel az említett karakterkészletben, (és nem foglalt) a ’%’ jellel kezd˝od˝o
2.1. A KÉRÉS ÜZENET
15
ASCII kódjának hexadecimális értékével helyettesíthetjük. Például a szóköz karakter " " helyett az "%20" karaktersorozat. Foglalt karaktereket sem használhatunk az egyes részekben. (";","/","?",":","@","&","=","+","$",",")
A foglalt karaktereket többnyire elválasztó karakterként használjuk az egyes címrészek között. Az azonosítás részen a felhasználó login neve helyezkedhet el egy ’@’ jellel lezárva. Egyes protokollok megengedik a jelszó átvitelét is. Itt a név után írt ’:’ karakter után írhatjuk a jelszavunkat. Például: ftp://felhasznalo:[email protected]
A HTTP specifikus címzési sémát URL (Universal Resource Locator)-nek nevezzük. Felépítése a következ˝o: http : // host [ : ] [ port ] [ abszolút_útvonal [ ? query ] ]
A szögletes zárójelben lev˝o opcionálisak. Az abszolút útvonal leírja az elérési útvonalat a gyökér könyvtártól a keresett állományig. Relatív útvonalnak nevezzük azt a címzési módot, amikor a kiindulási pont nem a gyökér könyvtár. Például, ha szeretnénk egy fájlban definiálni az ugyanazon a gépen lév˝o másik fájl elérési útvonalát. A HTTP üzeneteknek két típusa van: kérés (request) és válasz (respnose). Mindkét üzenet a következ˝o elemeket tartalmazza: • kezd˝o sor • fejléc sorok • üres sor • az üzenet tartalma
2.1.
A kérés üzenet
A kapcsolat-felépítés els˝o lépése a kérés üzenet. A HTTP protokollt egyszeru˝ protokollnak tervezték ugyanis hibamentes szolgáltatásra épül. Ezért csak 8 kérés függvénnyel rendelkezik:
16
FEJEZET 2. A HTTP PROTOKOLL
2.2. ábra. Üzenetcsere 1. GET 2. OPTIONS 3. POST 4. HEAD 5. PUT 6. DELETE 7. TRACE 8. CONNECT Íme néhány példa a leggyakrabban használt kérés függvényekre. Példáinkban a kiválasztott Web szerver 80-as portjára lépünk be telnet segítségével. Belépés után kiadjuk a kívánt parancsokat. A kérés üzenetek: GET – A GET függvény segítségével lehet lekérni egy URI segítségével megcímezett adathalmazt a szerverr˝ol. Pl.: GET / HTTP/1.1 Host: sirius.cab.u-szeged.hu HTTP/1.1 200 OK Date: Thu, 13 Dec 2001 16:55:37 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 Transfer-Encoding: chunked Content-Type: text/html 8a0 <TITLE>Irinyi Kabinet
2.1. A KÉRÉS ÜZENET
Az els˝o sorban lekértük a szerverr˝ol a ’/’ jellel azonosított gyökér könyvtárat és megadtuk az általunk használható legmagasabb verziószámú protokollt (HTTP/1.1). A második sorban megadtuk a szerver címét. Ezután az enter billentyu˝ lenyomásával átküldtünk egy sorvég karakter párt. A szerver a fent látható választ küldte. OPTIONS– Az OPTIONS függvény segítségével információt kérhetünk a szerver oldalon rendelkezésre álló kommunikációs paraméterekr˝ol, melyek általában egy adott er˝oforrásra érvényesek. Az OPTIONS parancs után meg kell adnunk az er˝oforrás URI azonosítóját. Ha a szerver egésze érdekel bennünket, akkor csillagot írunk ide. Pl: OPTIONS * HTTP/1.1 Host: sirius.cab.u-szeged.hu HTTP/1.1 200 OK Date: Mon, 17 Dec 2001 08:22:24 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE
A válaszban, a fejléc sorban megkaptuk azoknak a függvényeknek a listáját, melyeket a gyökér oldalon használhatunk. Lássunk egy példát egy dinamikus oldal paramétereinek. lekérdezésére. OPTIONS /cgi-bin/szotarE HTTP/1.1 Host: sirius.cab.u-szeged.hu
HTTP/1.1 200 OK Date: Mon, 17 Dec 2001 10:05:54 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 Content-Length: 0 Allow: GET, HEAD, POST, OPTIONS, TRACE
Megfigyelhetjük, hogy az adott oldal támogatja a POST függvényt is. HEAD– A HEAD függvény segítségével a válaszban csak a header részt kérjük a szervert˝ol. Ez akkor érdekes, ha kíváncsiak vagyunk arra, hogy változott-e az oldal az utolsó letöltés óta. HEAD /teszt/ HTTP/1.1 Host: wilma.cab.u-szeged.hu HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Cache-Control: max-age=86400 Expires: Tue, 18 Dec 2001 14:47:33 GMT
18
FEJEZET 2. A HTTP PROTOKOLL Content-Location: http://wilma.cab.u-szeged.hu/teszt/index.html Date: Mon, 17 Dec 2001 14:47:33 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Mon, 17 Dec 2001 14:03:32 GMT ETag: "fc50cd9c387c11:88e" Content-Length: 83
POST – Mint az URI leírásában láthattuk, a GET üzenet segítségével is tudunk a szerver oldal számára paramétereket átadni a ’?’-jel utáni részen. A POST üzenet segítségével azonban úgy küldhetünk adatokat a szerver számára, hogy nem az URI-t használjuk az átviend˝o adat számára, hanem a fejléc sorok után megadjuk az adat nevét és tartalmát. Pl.:. POST /teszt/ HTTP/1.1 Host: wiliam.u-szeged.hu adat: research
PUT – A PUT üzenet segítségével a kérésben szerepl˝o adathalmazt tudjuk az URI által megadott címre feltölteni. Amennyiben nincs még ilyen nevu˝ er˝oforrás (fájl), a szerver létrehoz egyet és err˝ol értesíti is a klienst. DELETE – A DELETE üzenet segítségével a kérésben szerepl˝o er˝oforrást töröljük szerverr˝ol. TRACE – A szerver a TRACE üzenet keretében kapott tartalmat visszaküldi, így egy alkalmazásrétegbeli visszacsatolást hozhatunk létre. Pl.: TRACE / HTTP/1.1 Host: wiliam.u-szeged.hu Adat: research HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Sun, 23 Dec 2001 12:49:45 GMT Content-type: message/http Content-length: 62 TRACE / HTTP/1.1 Host: wiliam.u-szeged.hu Adat: research
CONNECT – A HTTP/1.1-es szabvány lefoglalja a CONNECT függvénynevet az olyan proxy-kal történ˝o kapcsolatfelvétel számára melyek alkalmasak a tunel (HTTP csomagba ágyazott csomagok) funkció megvalósítására.
2.2. A VÁLASZ ÜZENET
19
A fejléc sorban küldhet a kliens további információkat a szerver számára. Ilyen információ például a fent látható Host mez˝o is. A mez˝ok teljes listája és funkcióiknak részletes leírása megtalálható a HTTP/1.1 [3] ajánlásban. Itt csak néhány példát említenénk: Host: A HTTP/1.1 ajánlás szerint minden kérés üzenetnek tartalmaznia kell ezt a mez˝ot, mely a szervert azonosítja. If-Modified-Since: A válasz üzenet csak akkor tartalmazza a kívánt tartalmat, ha az módosítva volt a kérés üzenetben elküldött id˝opont óta. User-Agent: Ezzel a fejléccel tudja magát azonosítani a kliens. Az üzenet tartalma általában üres. POST üzenetek esetén azonban itt helyezkedik el a szerver számára küldött adat neve és tartalma. Ha a tartalom nincs kódolva, akkor nem különbözik a fejléct˝ol. Ilyen tartalmat (Adat: research) láthattunk az utolsó példában.
2.2.
A válasz üzenet
A válasz üzenet, a kérés üzenethez hasonlóan igen egyszeru˝ felépítésu. ˝ A vezérl˝o információkon kívül, szerencsés esetben, tartalmazza a kért er˝oforrást is. Ez egy weboldal esetén az oldal HTML kódja. A válasz üzenet a következ˝oket tartalmazhatja: • Állapot mez˝o • Válasz fejléc mez˝ok • Er˝oforrás: – er˝oforrás fejléc – er˝oforrás tartalom A f˝o mez˝oket CRLF karakterek választják el egymástól. Az állapot mez˝oben a szerver azonosítja az általa használt HTTP protokoll verziót. A kérés feldolgozásának eredményére utaló állapot kódot a gépi értékelés számára, valamint az állapot okának rövid szöveges felhasználó által könnyen érthet˝o leírását. A háromjegyu˝ decimális számok segítségével ábrázolt állapot kódokat 5 csoportba sorolhatjuk, melyek a kód els˝o elemével azonosíthatók: • 1xx Információs - A kérés megérkezett, az eljárás folyamatban. • 2xx Siker - A kérés megérkezett sikerült megérteni és elfogadni. • 3xx Átirányítás -További beavatkozásra lesz szükség a kérés teljesítéséhez.
20
FEJEZET 2. A HTTP PROTOKOLL • 4xx Kliens oldali hiba - A kérés hibát tartalmaz vagy nem teljesíthet˝o. • 5xx Szerver oldali hiba - A szervernek nem sikerült kiszolgálnia a jónak tun˝ ˝ o kérést.
A válaszban a csoporton belüli második, harmadik karakterrel azonosítható állapot kódot találhatunk. Ezeknek az állapotkódoknak a pontos leírása fellehet˝o a HTTP/1.1[3] ajánlásban. A válasz fejléc mez˝okben az állapotkódban nem kódolható válaszra vonatkozó információkat adhatjuk meg. Ilyen például az azonosítás kérése (WWW-Authenticate)vagy a válasz üzenet életkora másodpercekben (Age). Az er˝oforrás fejléc további információkat tartalmazhat a válasz üzeneteben elküldött tartalomról. Egyik legfontosabb információ a tartalom típusa (Content-Type), mely meghatározza a tartalom kódolását. A tartalom típusát az alábbi módon ábrázoljuk: típus/altípus;paraméter A kódolási, média típusok a MIME (Multipurpose Internet Mail Extensions) [6] ajánlásban vannak megadva. A tartalom típusoknak két f˝o csoportját különböztetjük meg: egy- és többrészb˝ol álló csoportok Az egy részb˝ol álló csoport a következ˝o média típusokat tartalmazza: • text(szöveg) – szöveges információ. Egyszeru˝ szöveges információ azonosítására használjuk. Sorvég karakterként használhatjuk a CRLF karakterpárt vagy közülük bármelyiket. A plain altípus esetén a szöveg nem tartalmaz formázási, rendezési információkat, úgy kell megjeleníteni, ahogy van. Az egyik leggyakrabban használt altípus a html, itt HTML nyelvu˝ szövegként értelmezend˝o. Ha a charset paraméter nincs megadva, akkor us-ascii típusként értelmezzük. Magyar szövegnél az ISO-8859-2-es karakterkészletet kell alkalmazni. • image(kép) – kép. A kapott tartalom képként értelmezhet˝o, jeleníthet˝o meg. Altípusként a jpeg kódolás használatos. • audio(hang) – A kapott tartalom hangként értelmezhet˝o, játszható le. • video(video) – A kapott tartalom videóként értelmezhet˝o, játszható le. • application(alkalmazás) – Ide tartoznak azok az adatok, melyeket megjelenítés el˝ott a hozzá tartozó programnak még fel kell dolgoznia. Altípusként gyakran használják a octet-stream és PostScript típusokat, melyek esetében a tartalom bináris formátumú. Gyakran használják az octet-stream típust hang és videóanyag kódolására. A másik csoportba tartoznak a ún. többrészu˝ Multipart típusok. Itt a tartalom több egyforma vagy különböz˝o típusú részb˝ol áll, melyeket boundary paraméterrel megadható karaktersorozatok választják el egymástól. Minden egyes rész rendelkezik egy fejléccel melyben, azonosítja az adott rész kódolását.
2.3. BIZTONSÁG
2.3.
21
Biztonság
A HTTP protokoll tervezésénél els˝orendu˝ szempont volt a magas megbízhatóság és az egyszeruség. ˝ Az Internet elterjedésével egyre több új alkalmazás jelent, meg melyek új igényeket támasztottak a biztonság területén. Amikor a biztonságról beszélünk, a következ˝o szempontok merülhetnek fel: • az adatok titkossága • az adatok megbízhatósága • egyének azonosítása A HTTP-es ajánlás két igen egyszeru˝ challenge-response(felszólítás-válasz) azonosítási eljárást definiál. Pontos leírásuk megtalálható az rfc2617-es[7] ajánlásban. A következ˝okben ezt a két azonosítási eljárást fogjuk részletesebben megismerni.
2.3.1.
Basic Authentication
Az azonosítási eljárás azon alapul, hogy a kliensnek azonosítania kell magát a szerver számára egy azonosítóval(UID) és egy jelszóval (password). Ez az azonosítás a szerver minden egyes tartományára (realm) kiterjedhet, de a szerver ezeket a tartományokat külön is kezelheti. A szerver csak abban az esetben szolgálja ki a klienst, ha a kliens által megadott jelszó és azonosító megfelel˝o az URI által megadott védelmi környezetben. A szerver egy HTTP/1.1 401 Authorization Required hibaüzenet keretében elküldi a kliensnek az engedélyezett azonítási eljárásokat és az adott védelmi tartomány nevét. HTTP/1.1 401 Authorization Required Date: Fri, 28 Dec 2001 08:24:32 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 X-Powered-By: PHP/4.0.6 WWW-Authenticate: Basic realm="My Realm" Transfer-Encoding: chunked Content-Type: text/html
A WWW-Authenticate fejlécben definiálta az azonosítási eljárást (Basic) és a tartományt (realm = "My Realm") A kliens válaszában szerepelnie kell az Authorization fejlécnek a következ˝o módon: Authorization: Basic base64(user:pass)
A base64() a felhasználói azonosító és a jelszó base64-es kódolását jelenti. A kódolás lényege, hogy a karakterláncunkat az ASCII kódokkal binárisan ábrázolva felbontjuk 6 bites részekre, melyeket a hozzárendelt karakterekkel ábrázolunk. Tehát 3 8 bites karaktert 4 6 bites karakteren ábrázolunk.
22
FEJEZET 2. A HTTP PROTOKOLL
A pontos hozzárendelés megtalálható a rfc2045-ös [8] ajánlásban. Megfigyelhetjük, hogy a felhasználó a jelszavát ún. cleartext-ként küldi el, így teljesen védtelen a lehallgatások ellen. Ezért ez az azonítási mód csak nagyon korlátozottan, olyan helyeken javasolt, ahol nincs értékes információ és a szerver generálja a felhasználó jelszavát. Ez azért fontos, mert a felhasználók kényelmesek és hajlamosak egy jelszót több helyen is használni, így a lehallgatott jelszóval más, esetleg lényegesen fontosabb helyekre is be tud hatolni az lehallgató. A jelszó átvitelének problémáját oldja meg a Digest Access Authentication
2.3.2.
Digest Access Authentication
A Basic Authentication-hoz hasonlóan a Digest azonosítási protokoll is az ún. chalenge-response paradigmát használja. A Digest protokoll egy alkalmi (nonce) paramétert átküldve szólítja fel a klienst az azonosításra. A kliens a válaszban egy ellen˝orz˝o összeget küld, melynek kiszámításánál figyelembe veszi az alkalmi paramétert, a felhasználó nevet, a jelszavát, a HTTP függvényt, és a kért URI-t. Az ellen˝orz˝o összeg kiszámítására ún. hash algoritmusokat használnak, melyek egy tetsz˝oleges hosszúságú bemen˝o karakterláncból adott hosszúságú karakterláncot képeznek. A leképezés egyértelmu, ˝ tehát egy adott bemenetb˝ol csak egy adott kimenet nyerhet˝o. A bemen˝o karakterláncon történt módosítás megvátoztatja a kimenetet. A kimenetb˝ol nem lehet kiszámítani a bemenetet. A kimenetet ’message digest’-nek (üzenet kivonatnak), ’fingerprint’-nek (ujjlenyomatnak) nevezik. Általában az MD5-ös [9] algoritmust használják, mely tetsz˝oleges hosszúságú karakterláncból 128 bites kivonatot generál. Jelenlegi álláspont szerint, lehetetlen két különböz˝o bementb˝ol egyazon kimenetet, illetve egy bemenetb˝ol tetsz˝oleges kimenetet nyerni. A fenti módon kezelt jelszó nem kerül ki visszafejthet˝o formában. A jelszavakat nem szükséges titkosítatlan formában tárolni a szerveren, elegend˝o a bel˝olük képezhet˝o kivonatot tárolni (ez esetben a másik oldalon a kivonatot kell kódolni). A WWW-Authenticate üzenet a következ˝o paraméterekkel rendelkezik: • challenge– Itt lehet felsorolni a választható azonosítási protokollokat (Basic,Digest Access Authentication) ill. az utána igényelt paramétereket. • domain – Idéz˝ojelekkel bezárt szóközökkel elválasztott URI lista. Az azonosítás hatókörét adja meg. • nonce – A szerver által definiált karakterlánc. Nagyon fontos a helyes összeállítása, mivel ezzel a lehallgatott kivonatolt jelszavak újrafelhasználása igen jól korlátozható. Tegyük fel, hogy az üzenet váltás folyamán csak a jelszavunk kivonatát küldjük át. Ez esetben a lehallgató egyén a kivonatolt jelszavunkkal ugyanúgy be tud jelentkezni
2.3. BIZTONSÁG
23
a szerverre, mint mi. Jóval nehezebb a dolga abban az esetben, ha nem csak jelszavunkat kivonatoljuk, hanem el˝obb hozzáadunk egy olyan kivonatolt alkalmi karakterláncot (nonce), mely például az aktuális id˝opont mellett tartalmazza a kért tartalom URI-t illetve egy, csak a szerver által ismert kulcsot is. Ez esetben a lehallgató csak az elévülési ideig és csak az adott er˝oforráshoz férhet hozzá. Az alkalmi karakterláncot a szerveren kívül nem tudja más reprodukálni (mivel ez is kivonatolt és csak a szerver ismeri a benne szerepl˝o kulcsot). A fenti példa: nonce = H(id˝opont:URI:magán-kulcs) Itt a H() függvéy a kivonatoló függvény. • opaque – A szerver által küldött karakterlánc, melyet a kliensnek változtatás nélkül vissza kell küldenie. • stale – Értéke igaz, ha a szerver által kapott válasz kivonat azért nem fogadható el, mert elévült. Ez esetben a kliensnek az új nonce értékkel újra kell küldenie az adatokat, a felhasználótól azonban nem kell újra bekérnie a felhasználó nevet és a jelszót. • algorithm – A használt ellen˝orz˝o összeg(checksum) és kivonat(digest) algoritmusokat adhatjuk meg. MD5 az alapértelmezett mindkett˝ore. • qop-options – Opcionális, értéke auth, auth-int lehet, a válasz fejlécben részletesebben bemutatjuk. Az Authorization válasz paraméterei: • credentials – Itt választunk azonosítási protokollt, ill. megadjuk a kérésben felsorolt paraméterek értékét. • username – Felhasználónév. • digest-uri – A kérés URI. • message-qop – Opcionális. Itt választhatjuk ki, a védelem min˝oségét (Quality of Protection). Ha auth-int az értéke, akkor a válasz karakterlánchoz kivonatolás el˝ott többek közt hozzá kell adni a válasz tartalmának kivonatát. Ezáltal a válasz üzenet lehallgatója csak az adott utasítást tudja újra végrehajtani, amíg a nonce el nem évül. • cnonce - Opcionális, de ha az el˝oz˝o paraméternek értéket adunk, akkor kötelez˝o. A kliens által szabadon választott érték. Segítségével megakadályozhatjuk a szerver oldali támadások egy részét. Tegyük fel, hogy egy kliensünket eltérítik az eredeti szervert˝ol és egy rossz szándékú szerverrel építi fel a kapcsolatot. Ebben az esetben
24
FEJEZET 2. A HTTP PROTOKOLL (amennyiben kliensünk nem hajlandó Basic azonosításra) a szerver egyszeru˝ nonce értéket küldhet amire már esetleg egy szótár segítségével igen sok lehetséges jelszó értéket végigvizsgált. Így egyszeru˝ jelszó esetén könnyebben megfejtheti jelszavunkat. Ha azonban saját cnonce értékünket is hozzáadjuk a kivonatolás el˝ott akkor újra kell kezdenie a jelszó keresését. • nonce-count – Opcionális, de kötelez˝o megadni, ha a message-qop paramétert megadtuk. Értéke az elküldött kérések száma az ebben a kérésben foglalt nonce értékkel. Ha két üzenetben ugyanaz a szám szerepel, akkor az ismétlés. • response – A kivonatolt válasz. függvénye:
Kiszámításának módja a fentiek
– ha a message-qop paramétert nem adtuk meg: A1 = username-value:realm-value:passwd A2 = Method:digest-uri-value response = "KD(H(A1),nonce:H(A2))" KD() – kivonatoló(digest) algoritmus (MD5), H() – ellen˝orz˝o összeg (checksum) algoritmus (MD5) – ha a message-qop paraméter auth: A1 = username-value:realm-value:passwd A2 = Method:digest-uri-value response = "KD(H(A1),nonce:nonce-count:cnonce:qop:H(A2))" – ha a message-qop paraméter auth-int: A1 = username-value:realm-value:passwd A2 = Method:digest-uri-value:H(entity-body) response = "KD(H(A1),nonce:nonce-count:cnonce:qop:H(A2))"
Mint láthattuk, a Digest Access Authentication protokoll a jelszó átvitelénél fellép˝o biztonsági kockázatot kiküszöböli, ill. megvéd az ún. replay, ismétl˝o támadásoktól. Az átvitt adatokat azonban nem titkosítja. Két tökéletesebb megoldás született: az egyik a TLS protokoll, mely egy új réteget vezetett be a szállító és az alkalmazás rétegek közé. A másik megközelítés a SHTTP protokoll, mely HTTP protokoll kib˝ovítése adatvédelmi elemekkel. Mindkét megoldás biztosítja a következ˝oket: • A kapcsolattartó felek biztonságos azonosítása aszimmetrikus, vagy nyilvános kulcsú titkosítás segítségével. • Az adatátvitel titkosított. Küls˝o személyek számára gyakorlatilag viszszafejthetetlen. • Az adatátvitel megbízható. Küls˝o személyek nem tudnak észrevétlenül hamis adatot beleilleszteni a titkosított adatfolyamba (MAC).
26
FEJEZET 2. A HTTP PROTOKOLL
3. fejezet
Az SHTTP protokoll Az SHTTP [10] protokoll els˝o változatát E. Rescorla és A. Schiffman tervezte az Enterprise Integration Technologies cég számára. Céljuk egy olyan biztonságos üzenetorientált kommunikációs protokoll megvalósítása volt, mely felülr˝ol kompatibilis a HTTP protokollal. Azonos képességekkel ruházza fel mindkét oldalt, miközben megtartja a HTTP tranzakciós modelljét. A HTTP üzenetek átvitelét becsomagolással valósítja meg. Az üzenetek becsomagolásának két ajánlásban rögzített módját használja (CMS [11],MOSS [12]). Mindkét ajánlás támogatja az üzenetek azonosítását, aláírását, titkosítását. Az üzenetek becsomagolása többszintu˝ is lehet. Az adatok titkosítására használhatjuk a szimmetrikus és aszimmetrikus titkosítást is. A szimmetrikus titkosításhoz szükséges kulcs átadására a következ˝o módszereket biztosítja: • DH – Diffie-Hellman kulccsere algoritmus [13] • RSA • Inband – Egy s-http fejléc (Key-Assign) tartalmazza a kulcsot, természetesen a fejléc titkosítva van a fogadó nyilvános kulcsával • Outband – A kulcs egyéb forrásból származik, pl.: begépelik Az üzenetek felépítése hasonló, mint a HTTP protokollnál. Rendelkeznek egy parancs/állapot sorral és a megfelel˝o fejlécekkel. A hagyományos HTTP fejlécek közül csak a HOST és a CONNECTION használható az S-HTTP üzenet fejlécei között. A kérés üzenetek az alábbi sorral kezd˝odnek: Secure * Secure-HTTP/1.4
A válasz üzenetek: Secure-HTTP/1.4 200 OK
A fejlécekben lév˝o paraméterek segítségével egyeztetnek a kapcsolatban résztvev˝ok. Eldönthetik azt is, hogy használják-e a különböz˝o biztonsági funkciókat (digitális aláírás, titkosítás, azonosítás). Egy fejléc sor az alábbi részeket tartalmazhatja: 27
28
FEJEZET 3. AZ SHTTP PROTOKOLL • Property – a paraméter, amit egyeztetnek, pl.: a titkosító algoritmus • Value – az értéke, pl.: DES-CBC • Direction – az irány, amire érvényes (a forrás szemszögéb˝ol) • Strength – (szükséges, opcionális, elutasítva)
Egy példa a fejlécre: SHTTP-Key-Exchange-Algorithms: orig-optional=Inband, DH; recv-required=DH
A fejlécek után következik a tartalom, mely általában a HTTP kérést illetve választ tartalmazza titkosított formában. A tartalom titkosítására a következ˝o algoritmusokat használhatjuk: DES-ECB, DES-EDE-ECB, DESEDE3-ECB, DESX-ECB, IDEA-ECB, RC2-ECB,CDMF-ECB. A küld˝o azonosítására és az üzenet integritásának védelmére a MAC (Message Authentication Code) kódot használja, mely az üzenet tartalmának és egy közös titok kivonatából(hash) áll. Az üzenet aktualitásának ellen˝orzéséhez itt is alkalmazzák a HTTP-nél használt nonce változót.
4. fejezet
A TLS protokoll A HTTP protokoll biztonsági hiányosságainak kijavítására egy másik megoldást is kidolgoztak. Itt nem nyúltak a HTTP protokollhoz, hanem egy új réteget helyeztek alá ( biztonsági (security) réteget). Két eljárás született, az egyik a Netscape által kifejlesztett SSL (Secure socket Layer) [14], a másik a Microsoft által kifejlesztett PCT (Private Communication Transport) [15]. Az SSL népszerubb ˝ volt, így a webes tranzakciók szabványává vált. A széles körben elterjedt SSL szabványosítása érdekében az IETF létrehozta a TLS [16] szabványt. A TLS (Transport Layer Security) protokoll feladata az adat védelmének és integritásának biztosítása két alkalmazás között. Két rétegb˝ol áll: az alsó réteg a TLS Record Protocol, mely a TCP/IP vagy más megbízható átvitelt biztosító protokollra épül, feladata a kapcsolat biztosítása. Ez egyrészt azt jelenti, hogy a kapcsolat szimmetrikus titkosítással (DES,RC4, ...) rejtjelezett. A kulcsok a szimmetrikus titkosításhoz kapcsolatonként generálódnak. Másrészt a kapcsolat megbízható, mivel az üzenet átvitel magába foglalja az integritás vizsgálatot is mindkét oldali MAC segítségével. A következ˝o muveleteket ˝ végzi el az adatokon: 1. fragmentálás – a fels˝o rétegb˝ol érkez˝o adatfolyamot 214 bájtnál kisebb blokkokra tördeli 2. tömörítés - opcionális. Ha a felek megegyeztek, akkor egy veszteségmentes tömörít˝o algoritmussal tömörítik az egyes blokkokat. (Ezzel nem csak sávszelességet takarítunk meg, hanem az adat jellegét is megváltoztatjuk, így még nehezebb visszafejteni.) 3. tartalom védelem – legenerálják az adott blokkra jellemz˝o MAC kódot, amely magában foglalja többek között a blokk sorszámát, a kivonatoló algoritmus típusát, a blokk tartalmát, titkos kulcsot. 4. titkosítás – adatfolyam vagy blokk-titkosító algoritmussal titkosítják a blokkokat és a hozzájuk tartozó MAC kódokat. 29
30
FEJEZET 4. A TLS PROTOKOLL
Titkosított adatok kerülnek átvitelre, majd a másik oldalon feldolgozásra. Ahhoz azonban, hogy ez a folyamat bekövetkezzen, a feleknek kapcsolatot kell teremteniük egymással, azonosítaniuk kell egymást, a megfelel˝o paramétereket egyeztetniük kell. Erre szolgál a TLS Handshake Protocol, mely a TLS Record Protocol fölött helyezkedik el. Minden kapcsolat rendelkezik az alábbi paraméterekkel: • session identifier – egy változó bájt sorozat, melyet a szerver generál a kliens azonosítására • peer certificate – a társ X509v3-as bizonyítványa (nem kötelez˝o) • compression method – a tömörít˝o algoritmus • cipher spec – a titkosító, illetve a MAC kiszámítására szolgáló algoritmus • master secret – 48 bites titkos kulcs, melyet csak a kliens és a szerver ismer • is resumable – engedélyezett-e a kapcsolat alapján új kapcsolatot létrehozni (ekkor nincs szükség külön egyeztetésre, hanem ezeket a paramétereket használhatják a felek a session identifier kivételével) A fenti paraméterek egyeztetését szolgáltatja a TLS Handshake Protocol a TLS Record Protocol számára. A kapcsolat-felépítés az alábbi lépésekb˝ol áll: 1. Hello üzenetcsere, mellyel a felek kicserélik a véletlen számokat, megegyeznek a titkosító algoritmusokban és a kapcsolat másolhatóságában (is resumable) 2. kicserélik a megfelel˝o rejtjelezési paramétereket annak érdekében, hogy létre tudják hozni az ún. f˝okulcs el˝otti kulcsot (premaster secret) 3. elküldik egymásnak a bizonyítványokat (certificates) és a különböz˝o titkosítási információkat, melyek a kölcsönös azonosításhoz szükségesek 4. legenerálják a f˝o kulcsot (Master Secret) az el˝oz˝o kulcsból (premaster secret) és a kicserélt véletlen számokból 5. a titkosítási paramétereket átadja a TLS Record Protocol számára
5. fejezet
A HTML nyelv A HTML dokumentum a hasznos tartalom és a különböz˝o funkciókat megvalósító elemek egyvelege. Az elemek, melyeket az SGML-t˝ol átvett jelölésmóddal ’< elem >’ jelölünk, alkalmasak a dokumentum megjelenítésének definiálására, hiperhivatkozások kezelésére, valamint a felhasználói interaktivitás biztosítására. A böngész˝o elrejti el˝olünk a HTML elemeket és csak a formázott tartalmat jeleníti meg számunkra. A következ˝okben megismerkedünk a HTML nyelv néhány fontosabb szabályával, elemével. A HTML nyelv részletes leírása megtalálható a W3C szervezet honlapján [17]. HTML fájlok létrehozására tapasztalataim szerint egy igen jól használható ingyenes eszköz a HTML-kit 1 .
5.1.
A html dokumentum általános felépítése
Egy HTML dokumentum 3 f˝o részb˝ol áll: 1. információ a HTML verziójáról 2. fejrész (header) 3. törzs (body) Egy egyszeru˝ HTML dokumentum forrása: 1
http://www.chami.com/html-kit/
31
32
FEJEZET 5. A HTML NYELV
<TITLE>Ez a fejléc
Hello világ!
Böngész˝oben megjelenítve:
5.1. ábra. Egy egyszeru˝ HTML oldal A dokumentumban használt HTML nyelv verzióját, az utasítások típusát a W3C által megadott DTD (document type declaration) elem segítségével adhatjuk meg. A HTML 4.01-es ajánlás 3 elemet biztosít: • HTML 4.01 Strict DTD – Az elavultak kivételével minden elemet tartalmazhat a HTML dokumentum. A beillesztend˝o sor:
• HTML 4.01 Transitional DTD – Minden használható. A beillesztend˝o sor:
5.1. A HTML DOKUMENTUM ÁLTALÁNOS FELÉPÍTÉSE
33
• HTML 4.01 Frameset DTD – Akkor használhatjuk, ha dokumentumunkban kereteket (frame) definiálunk.
A dokumentum következ˝o részét a fejléc foglalja el, melynek kezdetét a
, végét a utasítás jelzi. A fejléc elemei között legfontosabb, egyben kötelez˝o a dokumentumcím, mely címet a <TITLE>és a utasítások közé kell zárni. A dokumentum ezen része az ablak címsorában jelenik meg. A utasításban szerepl˝o URI határozza meg a báziscímet, melyb˝ol a relatív címeket értelmezni kell. Ha nincs megadva, akkor az adott dokumentumhoz viszonyítva értend˝o a relatív cím. A utasítással jelölhet˝o ki a dokumentumban az alapértelmezett betuméret. ˝ Az utasítás jelzi a keres˝orendszerek számára, hogy index-dokumentumról van-e szó. A utasításban szerepl˝o opciók jelzik dokumentum kapcsolatait más dokumentumokkal, stíluslappal, címszalaggal, stb. Az <META>elem jelezheti a name, content tulajdonságok segítségével a keres˝orendszerek számára a dokumentumadatbázisba kerül˝o adatokat , pl. a dokumentum alkotóját, a létrehozó programot, rövid tartalmat, stb. Ezen elem http-equiv, content tulajdonságai segítségével befolyásolhatjuk a 19. oldalon megemlített HTTP fejléceket. Itt adhatjuk meg például azt is, hogy az oldal nem tárolható proxy szervereken. Érdemes megadni a dokumentumban használt karakterkészletet is, mert a különböz˝o böngész˝ok nem biztos, hogy a legmegfelel˝obb karakterkészletet használják.. Proxy vezérlés, karakterkészlet, szerz˝o, információ a keres˝o szerverek számára: <META http-equiv="Cache-Control" content="no-cache"> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-2"> <META name="Author" content="Bilicki Vilmos"> <META name="keywords" lang="hu" content="html, css, jegyzet">
A felhasználó számára a , elemek közötti rész hordozza a legtöbb hasznos információt. A elem fontosabb tulajdonságai:
34
FEJEZET 5. A HTML NYELV • background – A háttérkép elérési útját adhatjuk meg. • text – A szöveg színét definiálhatjuk. • link – Az oldalon szerepl˝o hivatkozások színét adhatjuk meg. • vlink – A felhasználó által látogatott hivatkozások színe. • alink – A felhasználó által kijelölt hivatkozások színe.
A fenti tulajdonságokat megadhatjuk a 6 fejezetben bemutatott CSS segítségével is, az ajánlás ezt javasolja. A dokumentum törzsében lév˝o szöveg formázására a szövegformázó utasítások, a szöveg logikai felépítését a csoportosító, címszint elemek, míg a törzsben lév˝o objektumok, szövegrészek elhelyezkedésének definiálására a táblázatok szolgálnak. A következ˝o 5.2, 5.3, 5.4 fejezetekben ezeket mutatjuk be.
5.2.
Logikai felépítést definiáló elemek
A dokumentum megjelenítésén kívül nagyon fontos az egyes részek azonosítása. Ezeket az információkat ugyan a felhasználó nem feltétlenül látja, azonban a dokumentum számítógépes feldolgozása esetén igen hasznos szolgálatot tehetnek. Segítségükkel egy általános struktúrát adhatunk dokumentumunknak, logikai részekre oszthatjuk. A címsor elemeknek segítségével az egyes logikai részek rövid címeit adhatjuk meg. Jelölése:
Cím
. Fontosságuk, méretük a szint növekedésével csökken. Mint a HTML minden eleme, rendelkezhet
Cím
azonosítóval. Az azonosítóknak egyedieknek kell lenniük az egész dokumentumban. Rendelkezhetnek a megjelenítést megadó class tulajdonsággal is, mely a CSSben megadott megjelenítési módok közül választja ki a megfelel˝ot. A szövegrészek csoportosítására szolgáló elemek a
és a <SPAN>. Mindkét elem rendelkezik a címsorok tulajdonságaival. A
elemet a nagyobb részek jelölésére (block element), míg a <SPAN>elemet a szövegen belüli logikai részek jelölésére használhatjuk (inline element). Íme egy példa HTML kód részlet a fentiek bemutatására: <TITLE>Bemutatkozás
Munkatársak
5.3. SZÖVEG FORMÁZÁSA
35
Cégünk munkatársai közé tartozik <SPAN id="portás">Kovács Lajos és <SPAN class="titkár">Nagy Péter.
A kutató osztály munkatársai <SPAN id="vegyészet">Kovács János, és <SPAN id="számítástechnika">Nagy Szabolcs.
A böngész˝oben a 5.2 ábrán látható módon nem látszik a felosztás, ám egy program számára feldolgozható módon rögzítettük a fontos információkat. Mint látjuk, a HTML nyelv ilyen irányú képességei igen korlátozottak. Ez volt az egyik oka a 7. fejezetben bemutatott XML nyelv kifejlesztésének.
5.2. ábra. Cég bemutató
5.3.
Szöveg formázása
A HTML dokumentum megjelenítése független a szövegfájl formázásától, csak az ajánlásban megadott formázó utasítások hatása érvényesül. A böngész˝o lecseréli a dokumentumban lév˝o CR, LF karakter-párokat szóközökre , ill. az egymás mellett lév˝o szóközöket, tabulátorokat egy szóközre. A
36
FEJEZET 5. A HTML NYELV
dokumentumot bekezdésekre oszthatjuk (). Egy-egy bekezdésre jellemz˝o a stílusa (karakterek formátuma, színe . . . ), a sorok rendezési iránya, a rá jellemz˝o nyelv, valamint, hogy ellátható id-vel. Az új bekezdés mindig új sorban kezd˝odik. Sortörést a elem segítségével illeszthetünk a szövegbe. Ha azt szeretnénk elkerülni, hogy a böngész˝o két egymás mellett álló szó között ne használjon sortörést akkor közéjük az ún. nonbreakable space ( ) elemet kell illesztenünk. Ha egy szöveget úgy szeretnénk viszont látni, ahogyan megformáztuk (szóközökkel, tabulátorokkal, sortörésekkel), akkor azt a <pre> elemek közé zárva kell beillesztenünk a HTML dokumentumba. Az alábbi elemeket is használhatjuk a szövegrészek megjelenítésének formázására: • <em>– kiemelés • <strong>– vastag betu˝ • – idézet (vékony, d˝olt betuk) ˝ • – rövidítés • <sub>– alsó index • <sup>– fels˝o index A HTML dokumentumban listákat is használhatunk. Megkülönböztetünk számozatlan, számozott, valamint definíció listákat. Listák
alma
körte
dió
alma
körte
dió
alma
Az alma egyik legfotosabb vitaminforrásunk.
dió
A dió kemény gyümölcs
5.4. TÁBLÁZATOK
37
A 5.3. ábrán láthatjuk a fenti kódot böngész˝oben megjelenítve. Az eddigiekben az egyes szövegrészek formázását láthattuk, azonban nem derült ki például az, hogyan tudunk két vagy több hasábos szöveget el˝oállítani, illetve szövegeinket a dokumentumban megfelel˝oen pozícionálni. A HTML dokumentumban az egyes objektumok helyzetének megadására táblázatok szolgálnak A következ˝o fejezetben err˝ol lesz szó.
5.3. ábra. Listák
5.4.
Táblázatok
Táblázatok segítségével a dokumentum objektumait sorokba és oszlopokba rendezhetjük. A táblázatokat a
elemekkel határoljuk. A táblázatok sorait a
elemekkel, míg az oszlopait
, vagy
elemekkel definiálhatjuk. Minden táblázatnak lehet címe
, fejléce , törzse , és lábléce . Egy egyszeru˝ táblázat: Táblázatok
38
FEJEZET 5. A HTML NYELV
Minta táblázat
1. oszlop
2. oszlop
3. oszlop
1. sor, 1. cella
1. sor, 2. cella
1. sor, 3. cella
2. sor, 1. cella
2. sor, 2. cella
2. sor, 3. cella
5.4. ábra. Egyszeru˝ táblázat
5.4. TÁBLÁZATOK
39
A 5.4. ábrán látható módon jelenik meg egy böngész˝oben. A
elem a következ˝o tulajdonságokkal rendelkezhet: • summary – nem jelenik meg, viszont hasznos információt biztosíthat az olyan klienseknek, melyek braile írást vagy beszédet használnak • width – megadható pixelben vagy a böngész˝o rendelkezésére álló szélesség százalékában. • border – a táblázat rácsainak vastagsága pixelben. Ha nincs megadva, akkor nem jelennek meg a rácsok. • frame – táblázatunk keretezési módját adhatjuk meg. • rules – a táblázaton belüli keretezést adhatjuk meg. • cellspacing – a cellák közötti távolságot definiálhatjuk. • cellpadding – a cellákon belüli távolság mértéke. A 5.4. ábrán látható táblázatot kicsit paraméterezve: Táblázatok
Minta táblázat
1. oszlop
2. oszlop
3. oszlop
1. sor, 1. cella
1. sor, 2. cella
1. sor, 3. cella
2. sor, 1. cella
2. sor, 2. cella
2. sor, 3. cella
A 5.5. ábrán látható módon a
elem tulajdonságainak változtatásával sok lehet˝oségünk van a megjelenítés formázásra. További formázási lehet˝oségeket biztosítanak számunkra a
cella elem colspan, rowspan tulajdonságai. Ezek segítségével cellákat egyesíthetünk függ˝olegesen és víszintesen egyaránt.
40
FEJEZET 5. A HTML NYELV
5.5. ábra. Formázott táblázat Táblázatok
Minta táblázat
1., 2. oszlop
3. oszlop
1. sor, 1. cella
1. sor, 2. cella
1. sor, 3. cella, 2. sor, 3. cella
2. sor, 1. cella
5.4. TÁBLÁZATOK
41
2. sor, 2. cella
5.6. ábra. Összevont cellák A táblázatot oszlopainak csoportosításával részekre tudjuk osztani, melyek egy vagy több oszlopot tartalmazhatnak. Az adott részegységben megadható az oszlopok szélessége, színe, stb. A
elemmel x számú oszlop fogható össze. A
, <\colgroup> elempárok segítségével is definiálhatunk oszlopcsoportot. Ekkor a csoportban lév˝o oszlopok tulajdonságait a
elem segítségével tudjuk megadni. Táblázatok
Minta táblázat
42
FEJEZET 5. A HTML NYELV
A
B
C
D
1. sor, 1. cella
1. sor, 2. cella
1. sor, 3. cella
1. sor, 4. cella
5.7. ábra. Csoportosított oszlopok
5.5. HIVATKOZÁSOK
5.5.
43
Hivatkozások
A HTML egyik legfontosabb szolgáltatása a hivatkozások kezelése. A hivatkozásoknak két formájával találkozhatunk: az egyik a elem, mely csak a fejrészben szerepelhet. Mint a fejrészben található legtöbb elem, a elem sem kerül megjelenítésre. Segítségével általában a küls˝ o stílusleíró fájl elérési útvonalát adjuk meg.
A másik hivatkozási elempár a csak a dokumentum törzsében alkalmazható. Legfontosabb tulajdonsága a href="cel.html" mely a céloldal URI címét tartalmazza. Segítségével hivatkozni lehet küls˝o er˝oforrásokra, de magára a tartalmazó oldalra is. Az oldalon lév˝o elemekben szerepl˝o id-ket címezhetjük meg. Ilyenkor a következ˝o formátumot használjuk: 1 -->2 --> ... Elso resz ...
Az elempár name tulajdonságára is hivatkozhatunk. A fenti példában relatív címzést használtunk, azaz nem írtuk ki a teljes elérési útvonalat, hanem csak az adott oldalhoz viszonyítva adtuk meg a címet. Ha más báziscímet szeretnénk használni, akkor azt a elemmel definiálhatjuk.
5.6.
Keretek (Frames)
Az eddigiekben azt tapasztalhattuk, hogy egy böngész˝oben egyszerre egy dokumentumot tekinthetünk meg. Felmerült azonban az igény olyan megoldásokra, amikor a böngész˝o ablakának egyik része változatlan, a másik viszont változik (menü, tartalom). Megoldás a keret (frame) szerkezet alkalmazása. A böngész˝oben megjelen˝o területet a táblázatokhoz hasonlóan feloszthatjuk függ˝olegesen és vízszintesen. Megadhatjuk, hogy az egyes részekben mely html, vagy más dokumentumok jelenjenek meg. Azon az oldalon, melyen ezt a szerkezetet definiáljuk, nem szerepeltethetünk törzset. Több keretes példa
44
FEJEZET 5. A HTML NYELV
5.8. ábra. Többkeretes dokumentum Egyes kereteknél megadhatjuk, hogy tartalmaz-e gördít˝osávot ( scrolling = yes|no|auto),és a keret nevét (name="név") mely igen fontos szerepet játszhat a hivatkozásoknál, mivel a elempárnak van egy target="" tulajdonsága, mely segítségével megadhatjuk, hogy a megcímzett er˝oforrás melyik keretünkben jelenjen meg. A keret fontosabb tulajdonságai közé tartozik még a noresize tulajdonság, melynek megadása esetén a kerethatárt nem lehet átméretezni. Érdekes lehet továbbá a frameborder=1|0 tulajdonság, mely segítségével megadhatjuk, hogy szeretnénk-e a kerethatárt látni vagy nem.
5.7.
Objektumok, Képek, appletek
A HTML ajánlás nem csak szövegek kezelését támogatja. Elhelyezhetünk képeket, appleteket, más HTML objektumot is a dokumentumunkon. Appleteknek nevezzük azokat a programokat, melyek a weblap letöltésével egyid˝oben automatikusan letölt˝odnek és futtatásra kerülnek a felhasználó gépén. Objektumainkat a szöveghez hasonlóan táblázatok segítségével pozícionálhatjuk. Képek beillesztéshez használhatjuk az elemet . Térképeket (map) (<map> , <area> ) is készíthetünk, melyek segítségével a kép
5.7. OBJEKTUMOK, KÉPEK, APPLETEK
45
más-más részére kattintva, a felhasználó más oldalakra jut. A térképeknek két változata van: kliensoldali és szerveroldali. Kliensoldali térképek esetén a kattintás helyének kiértékelése a kliensoldalon történik, ezt használjuk gyakrabban. Szerveroldali kiértékelést bonyolultabb térképeknél használjunk, itt a kattintás koordinátája lesz elküldve a szervernek. A térkép elem fontosabb tulajdonságai: • name – a térkép neve. • area – minden egyes területet egy-egy <area> elemet tartalmaz. • shape – a területet lefed˝o mértani alakzat neve (rect|circle|poly). • coords – a shape tulajdonsággal megadott alakzat sarkainak koordinátái (körnél a középpontjának koordinátája és sugarának hossza, poligonnál az els˝o és utolsó pontnak meg kell egyeznie). • href – az adott részhez kapcsolódó er˝oforrás. Kliensoldali térkép: Képek, térképek <map name="terkep"> <area href="elsomenu.html" coords="30,50,39,31,110,31,110,50,30,50" shape="poly"> <area href="masodikmenu.html" coords="80,30,100,110" shape="rect">