2017. december 5., kedd

Az Internet of Things (IOT) jelentősége

Az IoT magában foglalja mindazokat az okosított eszközöket, amik képesek kétirányú információcserére, vagy kommunikációra. Egyre gyakrabban találkozunk az IoT, azaz Internet of Things (a magyarul elég szerencsétlenül hangzó dolgok internete) kifejezéssel, hiszen egyre több cég foglalkozik ilyen, vagy ilyennek nevezett termékek, technológiák fejlesztésével. Sokan azonban nincsenek tisztában azzal, hogy mit is jelent ez, milyen jellegű eszközöket, megoldásokat illethetünk ezzel a jelzővel. Ez nem feltétlenül az ő hibájuk, hiszen általánosan definíció nincs arra vonatkozóan, hogy ki és mit hívhat IoT-nek. Hasonló tehát a helyzet az okostévékhez vagy okostelefonokhoz, de várhatóan azokhoz hasonlóan idővel itt is tisztul majd a kép. Mindenesetre azt mondhatjuk, hogy azok az eszközök tartoznak ebbe a csoportba, amelyek más eszközzel vagy eszközökkel kétirányú kommunikációt folytathatnak. A működés közben keletkező adatokat, információkat képesek más berendezésekre eljuttatni, és valamilyen technológia segíségével, akár netes adatbázisok, felhőalapú rendszerek révén a világ bármely pontján megosztani. Az IoT berendezéseket sokszor nevezik "okos"-nak, vagy "smart"-nak is, ami aztán végképp további kavarodást okozhat. Gyakorlatilag bármi, ami a fennt említett meghatározásnak megfelelhet. Azaz ennek értelmében lehet számítógép, monitor, hangfal, tablet, telefon, tévé, hűtőszekrény, vasaló, konnektor, villanykörte, autó, traktor, napelem, akkumulátor, de még ventilátor, wc, vagy akár virágcserép is. Ha egy olyan nagyobb rendszerről beszélünk, amely több kisebb alrendszert foglal magába, akkor értelemszerűen az is beleesik az IoT körbe, így beszélhetünk okos házakról, okos gyárakról, sőt okos teniszpályákról is, hogy például a smart gridről, azaz az intelligens villamosenergia-elosztó hálózatokról, és más nagy hálózati infrastruktúrákról ne is beszéljünk. Nyilván nem igazán egy kategória az okos tepsi vagy teniszütő az orvosi MRI-vel vagy akár egy komplex irodai rendszerrel, de attól még ezek mindegyikére rá lehet húzni az Internet of Things címkét. Egy szó mint száz,  lassan ott tartunk, hogy az életünk minden szegmensébe befészkelik magukat ezek a megoldások. Ezt tökéletesen alátámasztják az egyelőre kísérleti fázisban lévő okos városok vagy okos szigetek, ahol olyan élethelyzeteket szimulálnak, ahol minden mindennel összefügg, együttműködik és kommunikál. A nagy piaci résztvevők tervei szerint pedig hamarosan már ilyen településeken fogunk élni, vagyis nekik meggyőződésük, hogy a jövőben az IoT egyszerűen megkerülhetetlenné válik. Papíron ezekkel a megoldásokkal rengeteg pénz, idő és energia takarítható meg, az életünk pedig kényelmesebbé és egyszerűbbé válik. Tehát igen, nyugodtan mondhatjuk, hogy az IoT megoldások alapvetően hasznosak lehetnek, mert ha ez nem így lenne, akkor az egész koncepció halálra lenne ítélve, és ez azért már feltűnt volna valakinek. Viszont az is tény, hogy ebben az iparágban is rengeteg a felesleges, értelmetlen vagy érdektelen fejlesztés. Persze, hogy az, még egy darab gyurma vagy egy befőttesgumi is veszélyes lehet, ha rosszul használják. Nyilván vannak kockázatai az ilyen  technológiáknak, sőt igazából nem is kicsi. Nagyon érdekes kérdés, hogy mennyire veszélyeztethetik az emberek életét és az üzleti felhasználók működését, de tény, hogy pusztán ez a veszélyfaktor nem tudja megakasztani az IoT rendszerek elterjedését, legalábbis most nagyon úgy tűnik, hogy ez a helyzet. Ha minden jól megy, a közeljövőben kicsit nagyobb figyelmet fordítunk majd az IoT eszközökre és technológiákra. Ennek az az oka, hogy az IT, a szórakoztatóelektronika, a digicam, a telekommunikáció, tehát azok a területek, amelyekre a PH! fókuszál, ezer szállal kötődnek az IoT-hez. Ez egyben persze azt is jelenti, hogy az olyan, e területeken meghatározó cégek is fontos szereplői az IoT szegmensnek, mint például az Intel, az LG, a Logitech, a Panasonic, a Kingston, a Dell, a Netgear, a Parott, az Asus vagy az Acer, hogy csak néhány példát említsünk. Az alapvetően otthoni felhasználóknak szánt termékek, szolgáltatások és technológiák mellett szeretnénk majd foglalkozni a komplexebb, vállalati, üzleti felhasználóknak szánt eljárásokkal, eszközökkel is, illetve beszámolunk majd a pletykákról, lehetséges fejlődési irányokról is.

Hálózati cím átalakítás (Network Address Translation)

A NAT-nak két fő felhasználási területe van:
A NAT lehetővé teszi az IP hostoknak (TCP/IP hálózatban működő – kiszolgáló – számítógép), hogy a saját belső hálózatukban az Internet eléréséhez ne legyen szükség globális, egyedi, bejegyzett (fix) IP címekre.
A NAT képes korlátozni a nyilvános hálózatról az IP kiszolgálón keresztül való saját hálózati erőforrásainak elérését.
Az Internet eléréséhez a kiszolgálónak rendelkeznie kell egy globális egyedi címmel, melyet az Internet cím kiadó hatóságtól (IANA) vagy egyéb Internet szolgáltatótól kapott. A regisztrált IP címek kifogyása miatt ésszerűtlen a saját hálózatunk minden elemének fix IP címet kiosztani. A NAT megoldja ezt a problémát, a globális egyedi címet automatikusan újraosztja bármely kiszolgálónak, hogy az Internet elérhető legyen az “egyedi” router interfészen keresztül. A NAT lehetővé teszi, hogy a kiszolgáló a saját hálózatán is elérhesse az Internetet, még akkor is, ha az ő IP címe nem egyedi és globális.
A NAT képes korlátozni a nyilvános hálózatról a saját hálózati erőforrásainak elérését. A NAT konfigurálásával – címek átfordításával csak azon kiszolgálók számára, melyeket elérhetővé akarunk tenni a saját hálózatunkon kívülről is – letilthatjuk az összes egyéb erőforrás elérhetőségét a belső hálózatunkban. Bár a NAT-ot leggyakrabban az Internet elérés biztosítására használják, a NAT képes még a saját hálózatunkon belül elszigetelni, vagy megvédeni bizonyos rendszerelemeket a hálózatunk többi részéről. Például, a NAT használatával korlátozható a vállalat összes kritikus erőforrásának elérése, vagy levédhetők bizonyos pénzügyi adatok vagy a személyzeti osztály elszigetelhető az általános eléréstől.
Működési módok
A NAT beállítható a következő három működési mód egyikére: csak dinamikus, csak statikus, és a dinamikus és statikus mód kombinációjára. Dinamikus módban a saját hálózat kiszolgálói számára lehetővé válik a nyilvános hálózat elérése. Statikus módban a nyilvános hálózat kiszolgálói számára lehetővé válik a belső hálózatunk kiválasztott erőforrásainak elérése, vagy bizonyos saját kiszolgálóknál a nyilvános kiszolgálók elérése. A két mód kombinációját akkor használjuk, amikor szükség van mindkét mód funkcióira.
Dinamikus módban a kiszolgálóknak az Internet eléréséhez a NAT dinamikusan osztja az IP címeket, és a port a felhasználható portok közül az, amelyik állandóan újra felhasználható. Minden alkalommal, amikor egy csomag elküldésére kerül sor, a nyilvános hálózaton a saját cím lecserélődik a globális egyedi címre és a véletlenszerűen hozzárendelt portra. Amikor az elemi munkafolyamat kész, akkor a port visszakerül, és majd újraosztásra kerül, ha szükséges. Csatlakozás nem kezdeményezhető a nyilvános hálózatról a saját hálózat felé. A dinamikus mód használatához a NAT interfészt egy nyilvános címmel kell konfigurálni.
A NAT tartalmaz 5000 portot a TCP csatlakozásra, 5000 portot az UDP hozzárendeléséhez és 5000 portot az ICMP hozzárendeléséhez. Új kapcsolat létesítéséhez, amikor mind az UDP vagy ICMP hozzárendelés használatban van, akkor a NAT megszünteti (eldobja) a legrégebbi hozzárendelést, és a port számát az új hozzárendelésnek adja. Új TCP kapcsolat létesítése, amikor mind az 5000 kapcsolat használatban van, a NAT átadja az új kapcsolatnak a port számát, miközben megszünteti a legrégebbi kapcsolatot a következő szempontok szerint (sorrendben):
Bármely kapcsolat, mely már több mint 8 órája nem vitt át csomagot.
Bármely kapcsolat, melynél a csatlakozási próbálkozás több mint 2 percig sikertelen volt. (Azon a három utas TCP handshake nem teljes.)
Statikus módban a NAT IP cím pár táblázattal konfigurálható. Minden egyes táblázatbejegyzés tartalmaz egy IP cím párt, minden egyes kiszolgáló számára engedélyezve van a nyilvános kiszolgáló elérése. Minden egyes párban az első IP cím a nyilvános IP cím, melyhez az egyéni cím hozzárendelődik, a második cím a saját hálózatban a kiszolgáló címe. Mivel a nyilvános kiszolgáló a saját kiszolgálót csak a nyilvános IP cím használatával érheti el, ezért a nyilvános kiszolgálók csak azokat a kiszolgálókat érhetik el, amelyeknek a saját IP címeik definiálva vannak ebben a hálózati cím átalakító táblázatban (NAT-ban). Ráadásul, ha egy saját IP hostnak bejegyzést készítünk a NAT táblázatban, annak teljes elérése lesz a nyilvános IP kiszolgálók felé. A statikus mód használatához, egy nyilvános IP címet kell konfigurálni minden egyes saját kiszolgálónak.
A NAT konfigurálható a statikus és dinamikus üzemmód párhuzamos működésére is. Ez az összetett mód akkor használható, amikor a saját hálózatban vannak olyan kiszolgálók, melyek el akarják érni az Internetet, és vannak olyan erőforrásaik, amelyeket elérhetővé akarnak tenni a nyilvános hálózatról. A dinamikus és statikus mód használatakor egy nyilvános címet kell konfigurálni az egyes saját kiszolgálókhoz.
Megvalósítás
Az IP cím átalakításon kívül a NAT-nak a következő előnyei vannak még:
Dinamikus módban a NAT lehetővé teszi az Internet elérését anélkül, hogy szerezni és újraosztani kellene globális egyedi (fix) IP címeket minden egyes egységnek a saját hálózatunkban.
A NAT fokozza a saját hálózat biztonsági szintjét elrejtve azok egyedi címeit.
Dinamikus módban a NAT (hivatalosan) lehetővé teszi nagyszámú felhasználó Internet elérését egyetlen hálózati cím felhasználásával, mivel minden egyes Internetre csatlakozó felhasználó eltérő portszámot használ.
A NAT szűrőként is viselkedik, csak bizonyos kifelé és befelé irányuló kapcsolatokat engedélyez. A szűrő típusát az határozza meg, hogy a NAT-ot dinamikus vagy statikus módú működésre konfiguráltuk-e.
A NAT egy proxy szerver funkcióit nyújtja az adminisztratív többletmunka és szükséges speciális kliens szoftver nélkül.
Megkötések
A NAT a következő megszorításokat teszi:

A NAT nem támogatja azokat az alkalmazásokat, amelyek az IP címet beágyazzák az adatcsomagokba. Azonban a NAT végrehajtja azokat a speciális műveleteket, melyek lehetővé teszik az FTP funkciók helyes végrehajtását. (RFC 1631)
A multicast és broadcast csomagok nem kerülnek lefordításra (átalakításra).
A NAT táblázatban beállított minden saját és nyilvános címpár nem állítható be ugyanarra az IP címre, hacsak nem a nyilvános címet helyi szolgáltatások elérésére használjuk a NAT-os routeren. Például, ha a helyi szolgáltatás magában foglal egy FTP és egy WWW szervert is.
A NAT nem teszi lehetővé, hogy két LAN vagy WAN interfészen keresztül is elérhető legyen ugyanaz a saját kiszolgáló, ha ez a kiszolgáló konfigurálva van a NAT táblázatban.
NAT-os WAN interfészt konfigurálni kell “WAN hálózati módban” (WAN Network Mode), be kell állítani a “számozott pont-pont kapcsolatot” (Numbered Point-to-Point), vagy a “többszörös elérést” (Multiacces).
A router konfigurálásánál az “IP elküldést” (IP Forwarding) “Yes”-re kell állítani.
Ha a “távoli router dinamikusan fog hozzárendelni IP címet” (Remote Router Will Dynamically Assign the IP Address) “Yes”-re van állítva, akkor a címhozzárendelés a csere tárgya, ez csak dinamikus módban praktikus.

Szerver távoli elérési lehetőségei 14A és 13A részére



UVNC,Telnet,Putty, Távoli asztal kapcsolat(Remote Desktop Connection), OVPN, DirectAccess, Hamachi logmein, Network Access Protection, Mobile Broadband

Putty használata

A hálózat biztonsága érdekében a Telnet használata helyett az SSH használata szükséges.
A Hálózat gépeibe SSH-val való belépést a "PuTTY" támogatja.
A PuTTY letöltéséhez, konfigurálásához nyújt segítséget ez a leírás.
Mint a címben is olvasható a PuTTY 0.53b verzióját, ami a legfrissebb, javasoljuk letölteni.
Putty letöltése
A letöltés a következő URL címről:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Menete:
putty.exe-re kattintva, a PC diszkjén ki kell jelölni egy directory-t, ahova a lementés történjen
A WINDOWS ablakon az egér jobb gombjával felhívni az új parancsikon létrehozásához szükséges ablakot
Kijelölni az Új mezőt
Parancsikon-ra kattintani
a feljövő ablak parancssorába beírni az útvonalat, ahova előzőleg a putty.exe-t bemásoltuk.
(Lehet ugyanezt a Tallózás gombbal is) --> Tovább
Programnév választása ablakban
Adjon meg nevet a parancsikonhoz mezőbe beírjuk a nevet --> Befejezés
Megjelenik a PuTTY indító ikonja a képernyőnkön
PuTTY konfigurálása
1. lépés: Session konfigurálása
2.a. lépés: Betűtípus, betűméret kiválasztása
2.b. lépés: Betűtípus, betűméret kiválasztása
3.a. lépés: A képernyő színeinek (előtér - betű színének) beállítása
3.a. lépés: A képernyő színeinek (előtér - betű színének) beállítása (folyt.)
3.b. lépés: A képernyő színeinek (háttér színének) beállítása
3.b. lépés: A képernyő színeinek (háttér színének) beállítása (folyt.)
4. lépés: X forwarding bekapcsolás
5. lépés: putty konfigurációnk elmentése
6. lépés: SSH session megnyitása


UVNC használata

A programok telepítésénél semmi bonyolult nincs. A szerver az irányítani kívánt gépre kell.
A kliens (viewer) meg arra a gépre amiről irányítani szeretnéd (de akár Androidra is van VNC kliens).
Ha az irányítani kívánt gép router mögött van, akkor a csatlakozáshoz szükséges portot forward-olni kell (alapértelmezésben 5900-es) a router beállítófelületén.
Ezután a kapcsolat létrehozásához csupán az irányítani kívánt gép internetkapcsolatának (külső) IP címe kell. (a belső az, amit a router oszt ki a rákapcsolódó gépeknek)
Az internetre kapcsolódáskor kapott (külső) IP cím általában mindig más, ezért az aktuális IP cím megszerzéséhez kicsit trükközni kell. Többféle módszer is van:
1. DDNS - regisztrálhatunk egy nevet egy szolgáltatónál és utána ha az adott gépen bejelentkezünk, akkor a kapott szöveges domain-nevet (pl. sajatnevem.no-ip.org) a szolgáltató a saját IP címünkre irányítja a bejelentkezés alapján.
Ha az irányítani kívánt gép router "mögött" van, akkor a legtöbb router beállításai között van ingyenes DDNS szolgálttásba beléptetés.
Ha nincsen router, akkor a DDNS szolgáltató kliensprogramja végzi el a beléptetést.
2. Ha valamiért nem akarna működni a DDNS akkor körülményesebb megoldás:
- valahol regisztrálunk ingyenes tárhelyet, ahol mondjuk PHP engedélyezett és egy egyszerű PHP script-tel rögzítjük a script-et meghívó gép IP címét a tárhelyen egy szöveges fájlba
- az adott gépen a feladatütemezőbe rögzítjük az előbbi PHP script meghívását, mondjuk óránként (hátha megszakad a net és újracsatlakozás szükséges, ami után új IP cím lesz) - ehhez szükség van egy külön programra, mondjuk a szimpla parancssoros wget-re
- ezután ha csatlakozni akarunk, egy böngészőbe beírjuk a PHP script által létrehozott szöveges fájlt és máris látjuk az aktuális IP címet
(ha a DDNS nem működne megkeresem a rövid PHP kódot és a feladatütemező parancssori utasítást).


OpenVPN használata

szerverként és kliensként Windowson először telepíteni kell az OpenVPN programot a szerver és a kliens oldalra is. Töltsük le a Windowsos csomagot az http://www.openvpn.net honlapjáról. (XP, Vista és Windows 7 verziók léteznek belőle, de alkalmazható Windows 2000, Windows 2003 és Windows 2008 szerverekre is). A Windows 7 x64-es verzióhoz legalábbb az OpenVPN 2.1.1 verziót kell letölteni.
·         A szokásos módon telepítsük a windows alkalmazást. A telepítő létrehoz egy GUI-t is, ami a Windows rendszereken később még jól jöhet.
·         Állítsuk be a tűzfalat, ha van
·         Állítsuk be a szerver oldalon a kulcsokat
·         Konfiguráljuk a szerver oldali alkalmazást
·         Állítsuk be a kliens oldalakat is
·         Hozzuk létre a kapcsolatot próbaként.

WinSCP használata

WinSCP egy népszerű, ingyenes SFTP és FTP kliens Windowshoz, egy erőteljes többfunkciós eszköz. WinSCP segítségével helyi és távoli számítógépek között fájlokat másolhat több protokoll használatával: FTP, FTPS, SCP, SFTP vagy WebDAV. WinSCP egy könnyen használható grafikus felületet biztosít az összes általános fájl- és könyvtárművelethez. Képzett felhasználók .NET assembly használatával automatizálhatják. Angolul és számos egyéb nyelven is elérhető.

Telnet használata

Indítsa el a telnet programot a készülék IP címével vagy gazdagép nevével.
% telnet IP_address
Írja be a felhasználói nevet és a jelszót.
Részletes információért a felhasználói névről és a jelszóról forduljon a hálózat rendszergazdájához.
A felhasználói hitelesítéshez adja meg a bejelentkezési felhasználói nevet és jelszót.
A kódos azonosításhoz írja be a felhasználói kódot a Felhasználói név mezőbe.
Írja be a parancsot.
Kilépés a telnet-ből.
msh> logout
A változtatások mentéséről szóló konfigurációs üzenet jelenik meg.
Ha nem szeretné menteni a módosításokat, írja be az "yes" szót, majd nyomja meg az [Enter] billentyűt.
Ha nem szeretné menteni a módosításokat, írja be a "no" szót, majd nyomja meg az [Enter] billentyűt. További változtatásokhoz írja be a "return" szót a parancssorba, majd nyomja meg az [Enter] billentyűt.
Ha a "Can not write NVRAM information" üzenet jelenik meg, akkor a változtatásokat nem sikerült mentenie. Ismételje meg a fenti eljárást
A változtatások elmentésekor a hálózati kártya automatikusan módosítja saját beállításait.
A hálózati kártya alapállapotba állásakor az éppen feldolgozás alatt lévő nyomtatási munkát kinyomtatja a készülék. A sorbaállított nyomtatási munkákat azonban törli a készülék.
Ha a Telnet programot a Windows Vista rendszeren szeretné használni, telepítve kell lennie a SmartDeviceMonitor for Client programnak.

DirectAccess haszálata

A DirectAccess legnagyobb előnye, hogy a felhasználó beavatkozása nélkül képes folyamatos és biztonságos kapcsolatot biztosítani a vállalati hálózathoz. Az elsőként a Windows 7-ben és a Windows Server 2008 R2-ben megismert szolgáltatás IPv6 és IPSec segítségével – megfelelő kiépítés esetén – bármilyen közegből (publikus helyek, otthon, mobil használat) képes a belső, védett hálózat teljes vagy szabályozott elérését biztosítani.

Nem csak a felhasználó, hanem a számítógépe is eléri a belső hálózatot, azaz rendszer felügyeleti szempontból is jelentősen segít az üzemeltetőknek ez a megoldás, hiszen ha a gép elérhető (azaz bármikor, amikor van Internet-elérés), akkor a Direct Access kapcsolat a különböző felügyeleti megoldások (csoportházirend, WSUS, System Center, stb.) számára is működik.

http://animeaddicts.hu/article.php?id.264

2017. december 4., hétfő

Hálózatbiztonság

A biztonságos kommunikációnak több egymástól függetleníthető és mégis egymással összefüggő összetevője van:
Sértetlenség: Annak garantálása, hogy hibamentesen (változás nélkül) ér célba egy elküldött üzenet, illetve egy esetleges hiba detektálható, így újraadással javítható.
Hitelesség: A sértetlenség önmagában még nem garantálja, hogy az üzenetet valóban az küldte, akit feltételezünk, pusztán azt, hogy a hálózati továbbítás során nem sérült. A hitelesség a sértetlenségen felül a vevő fél felé garantálja, hogy az adott üzenet a feltételezett küldőtől származik és annak tartalma nem módosult.
Letagadhatatlanság: A letagadhatatlanság a hitelességnél annyival több, hogy ez esetben nem csak a vevő felé, hanem tetszőleges harmadik személy felé is igazolható, hogy egy adott üzenetet (megrendelést, nyilatkozatot) a valódi küldő küldte, tettét letagadni nem tudja. A letagadhatatlanság követelményét csak az úgynevezett aszimmetrikus vagy nyilvános kulcsú kriptográfia módszereivel lehet biztosítani, amikor már a harmadik fél számára is bizonyítható, hogy az aláírást ki készítette.
Bizalmasság: A biztonságos kommunikáció kapcsán legtöbben a bizalmasság, avagy titkosság biztosítását értik. Kriptográfiai módszerekkel ugyanis elérhető, hogy olyan formában kódolva továbbítódjon egy üzenet, hogy azt egy támadó lehallgatva, a titkos kulcs ismerete nélkül ne értse meg, illetve szigorúbb esetben magának az üzenetnek a tartalmára még valószínűségi alapon se tudjon következtetni.
Távoli azonosítás: A mennyiben két fél személyesen még nem találkozott, illetve kettejük között nincs biztonságos (manipulálhatatlan, lehallgathatatlan) csatorna (pl. személyes találkozó), akkor egyéb módszerekkel, tipikusan külső szereplő(k) bevonásával kell biztosítani, hogy őket egymásnak biztonságosan mutassák be és a későbbiekben hitelt érdemlően tudják egymást azonosítani. Gyakorlatban a távoli azonosítást az úgynevezett elektronikus igazolványok rendszerével, illetve ezen igazolványok hitelességét biztosító PKI (Public Key Infrastructure) infrastruktúrával oldják meg
2 Támadási módszerek
A támadásokat kiváltó okok többfélék lehetnek, általában a következők valamelyike:
a támadó hasznot akar húzni a dologból, haszonszerzésre törekszik, előfordulhat, hogy el akarja adni más személyeknek a felhasználó adatait,
a támadó a szolgáltató megítélését, hírnevét akarja gyengíteni, ezzel kárt okozva a szolgáltatónak, mivel kevesebben bíznak meg benne ezután
a támadó bizonyos értelemben jó szándékú, csak a rendszer hibáira akarja felhívni a figyelmet
a támadás lehet egyszerű erőfitogtatás, szórakozás
ugródeszka keresése más gépek feltöréséhez
A támadások megkülönböztethetők a szerint is, hogy a támadó a hálózaton keresztül, a hálózati biztonsági beállítások kijátszásával (külső); vagy e nélkül (belső) jut információkhoz, vagy bénítja meg gépünket. A támadások ellen elég nehéz konkrét megoldást nyújtani, de általánosságban elmondható, hogy a legtöbb esetben elkerülhetőek, kivédhetőek, ha megfelelően vannak beállítva a felhasználók jogosultságai, az erőforrásokhoz való hozzáférés, hálózati paraméterek.
Nyilvánvaló, hogy a kliens és a szerver mind belső mind külső módon támadható, hiszen mindkettő kapcsolatban van a hálózattal. A köztük lévő hálózat esetén nem értelmezhető ez a megkülönböztetés.
Belső támadásnak nevezünk minden olyan támadási módszert, melyet olyan felhasználók valósítanak meg, akik már a rendszerrel szemben valamilyen bizalmi státuszban vannak (például van jelszavas hozzáférésük egy adott kiszolgálóhoz), így nem kell a hálózati biztonsági beállításait kijátszaniuk. A gyakorlatban a támadások nagy hányada belső támadás, ugyanakkor egy sikeresen megvalósított külső támadás célja sok esetben a rendszerhez való hozzáférés, és azon valamilyen belső támadás végrehajtása. A következőkben a belső támadások alapvető módszereit vesszük számba.
Fork bomba (fork bomb): Olyan program, amely a fork() rendszerhívás segítségével, saját magát több példányban elindítja, s így feleslegesen emészti fel a processzoridőt és memóriát. Védekezni ellene erőforrás korlátozással lehetséges.
Puffer túlcsordulás (buffer overflow): Programozási hiba folytán, ha egy puffer az adott méretén túlírható, akkor a függvény visszatérési címe átírható. Ennek az oka, hogy a C fordítók fordításkor nem figyelik a tömbhatár túllépést, illetve vannak olyan függvények, melyek nem ellenőrzik a puffer méretét írás előtt. Így az adott rendszeren a futó program jogaival tetszőleges más programok is futtathatók. Manapság egyre többféle megjelenése van ezen támadási formának. Nem csupán kiszolgáló programok, de akár ügyféloldali programok (pl. médialejátszó, webböngésző) ellen is készülnek hasonló támadást megvalósító kártékony programok
Ismert tmp fájl támadás (known tmp filename attack): A lényege, hogy egyes programoknak a /tmp könyvtárba írt fájljainak neve kitalálható, így még a program indítása előtt, ezzel a névvel létre lehet hozni egy linket, mely egy másik fájlra mutat. Ezzel az eljárással olyan fájlokat módosíthatunk, amelyhez egyébként nincs jogunk.
Exploit-ok: olyan előre gyártott programocskák, melyek minden különösebb szakértelem nélkül rendszergazdai jogköröket adhatnak az újdonsült támadóknak. Általában egy-egy program biztonsági hibái alapján készülnek, tudván, hogy nem minden rendszeren végzik el egy hiba bejelentése után az érintett programok biztonsági frissítését.
Ezekkel a módszerekkel lehetőség van a számítógépen tárolt adatok illetéktelen felhasználására. Régebben csak a szerveren tárolták a jelszavakat, ezért inkább a szervert kellett a támadások elleni védelemre felkészíteni. Az újabb böngészőkben megjelent azonban egy új kényelmi szolgáltatás, a felhasználó jelszavainak automatikus beírása. Ez felajánlja a felhasználónak, hogy adott felhasználói névhez tartozó jelszavát eltárolja, így a felhasználónak nem kell azt minden egyes alkalommal begépelnie. Így viszont egy újabb támadási pont keletkezik, ezúttal a kliens oldalon, hiszen ezek a jelszavak is egy fájlban tárolódnak valahol.
A támadók legkönnyebben a felhasználók nem megfelelő jelszóválasztását és gondatlanságát kihasználva szerezhetik meg a jelszót. Ilyen támadáshoz nem is feltétlenül szükséges számítástechnikai ismeret. Nagyon gyakori, hogy a felhasználókat ismerve könnyen kitalálható az általuk használt jelszó, mivel az valamilyen kedvencük (háziállat, sportoló, zenész) neve, saját adatuk (születési hely, lakóhely, születésnap), stb. Szintén sűrűn előfordul, hogy a számítógép monitorára ragasztanak egy cetlit, amire felírják az általuk használt jelszót, így azt bárki láthatja.Külső támadásnak nevezzük azokat a támadásokat, melyek a hálózati biztonsági beállítások kijátszásával próbálnak egy rendszerhez jogosulatlanul hozzáférni. A külső támadások irányulhatnak információ megszerzésére, törlésére, egy szolgáltatás megbénítására vagy speciális erőforrások jogosulatlan felhasználására (pl.: belső biztonsági rendszerhez hozzáférés, kiszolgáló erőforrásainak kihasználása• IP cím hamisítás (IP address spoofing): az IP datagram alapú protokoll, melyben a kommunikáló felek építik fel a teljes IP fejlécet. Emiatt elképzelhető, hogy egy hálózati eszköz olyan üzenetet küldjön, melyben az IP datagram feladóját meghamisítja, abba nem a valós IP címét helyezi. Ugyan a feladó ekkor az IP útválasztása miatt nem kapja meg a válaszüzenetet, de látni fogjuk, hogy egyes támadások esetén erre nincs is szükség. Az esetek kis részében az IP hamisítás kiszűrheti például úgy, hogy bizonyos helyekről egyértelműen meghatározható címeket fogadunk csak el (pl. egy privát hálózatban gyanús lehet egy, a hálózati maszkhoz nem illő IP cím megjelenése), de általánosságban csak speciális protokollok segítségével bizonyosodhatunk meg az IP datagramokban levő IP címek valódiságáról (pl. IPSec).
Névszerver átejtés (DNS spoofing): a támadás lényege, hogy az áldozat egy névfeloldással hamis információt kapjon. Ez elérhető az áldozat DNS szerverének feltörésével, vagy hamis DNS válaszüzenet küldésével a DNS szerver nevében (a DNS lekérés UDP protokollon megy, egy megfelelő hálózati beékelődéssel pedig már nagyon könnyű meghamisítani a választ). A támadással elérhető, hogy az áldozat másik hálózati eszközzel lépjen kapcsolatba, mint amivel eredetileg szeretett volna. A DNS átejtéssel a támadó kikényszerítheti, hogy az áldozat kapcsolatot kezdeményezzen vele (pl. jelszóval elérhető szolgáltatás eltérítése esetén megszerezheti a jelszót, melyet a gyanútlan áldozat elküld neki).
TCP/UDP átejtés (TCP/UDP spoofing): Hibásan implementált protokollverem, vagy protokollhiányosságok miatt a már felépült, illetve kezdeményezett kapcsolatokat egy harmadik személy „elrabolhatja” vagy idegen csomagokat csempészhet bele
Szolgáltatás lebénítására irányuló támadási módszerek (Denial of Service, DoS) célja egy szolgáltatás lelassítása, megakasztása. DDoS (Distributed Denial of Service, Elosztott DoS támadás) esetén sok “ártatlan” számítógépre támadóprogramot telepítenek a tulajdonos engedélye (és akár tudta) nélkül, melyekről később egy időpontban indul “elosztott” támadás a célgép ellen. A támadott erőforrás alapján néhány példa DoS támadásokra:
A merevlemez kapacitás elleni támadás lehet olyan események előidézése egy adott hálózati kiszolgálón, melyek naplóbejegyzést okoznak. Rosszul tervezett kiszolgáló esetén a naplóbejegyzésekkel megtöltött merevlemez több szolgáltatás leállását is okozhatja (pl. levelezés, webszerver, stb.).
A számítási kapacitás elleni támadások a kiszolgálón nagymértékű processzorterhelést okoznak. A támadást általában olyan, nem várt eseményekkel váltják ki, melyekre a támadott program hibásan van felkészítve. Ilyen esemény lehet például egy nem specifikált értéket tartalmazó üzenet egy adott protokoll felett. Sikeres támadás esetén a támadott program végtelen ciklusba esve emészti fel a kiszolgáló számítási kapacitását.
A sávszélesség elleni támadásokat legtöbbször a már említett DDoS módszerrel valósítanak meg. Ilyenkor általában egy, az Interneten elérhető hálózati kiszolgáló hasznos forgalmát szeretnék kiszorítani nagymennyiségű haszontalan forgalom generálásával. A már több nagyvállalat Internetes portálja ellen bekövetkezett DDoS támadások tapasztalata, hogy ezen támadások kivédése általában nagyon sok pénzt és energiát emészt fel.
Egyéb hálózati erőforrás elleni támadások is elképzelhetőek. Ilyen lehet például akár egy DHCP kiszolgáló címterének szándékos kimerítése vagy egy hálózati switch MAC címtáblájának túltöltése is.

Néhány ismertebb gyakorlati példa DoS alapú támadásokra:
SYN elárasztás (SYN flooding): Ez a támadási típus olyan TCP csomagokkal árasztja el gépünket, melyekben a SYN flag értéke 1, azaz hatalmas mennyiségű kapcsolat kezdeményezését jelző csomagot kapunk, mely látszólag egy olyan géptől érkezik, ami nem érhető el. Mialatt gépünk a hamis SYN csomagok kiszolgálásával foglalkozik, nem marad elég erőforrása, hogy a valódi kapcsolatkezdeményezéseket kiszolgálja.
Előfordul olyan SYN elárasztás is, mikor a támadó az áldozat címét helyezi feladóként a SYN üzenetbe, majd ezt nagyon sok helyre elküldi. Ebben az esetben a címzettek a hamis feladó alapján nem a támadó, hanem az áldozat felé küldenek nagyon sok SYN/ACK üzenetet. Ebben az esetben a támadónak nem is kell közvetlen kapcsolatban lennie az áldozattal.
Land attack: lényege, hogy valaki olyan csomagot küld, aminek a feladóját úgy hamisítja meg, hogy a címzettel essen egybe, ami egy végtelen ciklusba kergeti a fogadót, és bizonyos operációs rendszerek esetén a számítógép lefagyását eredményezi. Ezzel a módszerrel nem csak számítógépek, hanem routerek, hálózati nyomtatók is támadhatók.
Smurf attack: Egy adott hálózatban olyan ping csomagokat küldenek el broadcast üzenetként, melyben feladóként a megtámadni kívánt gép van feltüntetve. Ezért visszafelé hatalmas mennyiségű válaszüzenetet fog kapni a megtámadott számítógép, melyek fogadása teljesen felemészti a rendszer erőforrásait. Ilyen volt például néhány éve az Amazon elleni támadás is.
A halál pingje (Ping of Dead): A hálózati operációs rendszerek (UNIX, Windows, stb.) azon hibáját használta ki régen, miszerint olyan ICMP csomagot küldtek a támadott gép felé, mely 64 kB-nál nagyobb volt, s ettől a rendszer azonnal lefagyott. Az újabb verziókban már javították ezt a hibát.
Könnycseppek (Teardrop): Az ilyen jellegű támadások lényege az, hogy olyan TCP és UDP csomagokat küldünk a célgépnek, melyek fejléce valótlan adatokat tartalmaz. Számítógépünk ezen hamis adatok alapján próbálja meg összerakni a teljes csomagot, melynek eredménye az lesz, hogy gépünk iszonyatosan lelassul
Szaglászás (Sniffing): Hálózati forgalmat figyelhetünk vele, mely segítségével értékes információhoz juthatunk. Segítségükkel védekezni is lehet a támadások ellen, ezért bővebben a védekezésről szóló részben lesz róluk szó.
Portpásztázás (Portscan): Egy hálózati eszköz nyitott portjait ellenőrizhetjük e módszerrel. Szintén használható védekezésre is, így bővebben a védekezésről szóló részben lesz róla szó
A jelszavakat általában egyirányú titkosítással kódolt formában tárolják (pl.: hash). Ez azt jelenti, hogy tipikusan a jelszótárolási technikáknál, nem magára a rejtjelezett adatra vagyunk kíváncsiak, hanem inkább a kódolt adatot hasonlítjuk össze, a rejtjelezve tárolt adattal. Ez csak akkor lehet azonos, ha ugyanazt a jelszót, adatot adtuk be a titkosító programnak. A probléma az, hogy ha ismerjük a titkosító eljárást, akkor próbálgatással kideríthető az eredeti jelszó. A próbálgatásra is többféle eljárás alkalmazható.
Szótár alapú (Dictionary Based) támadás arra a feltételezésre épít, hogy a felhasználók többsége a saját anyanyelvének valamely szavát használja jelszóként. A program egy listából sorba veszi a szavakat, az ismert titkosító eljárással kódolja, s ha ez megegyezik a tárolt alakkal, akkor megvan a jelszó. A „Nyers erő” (Brute force) támadáskor a program az összes alfanumerikus karaktersorozatból tetszőleges sorrendben összerak szavakat, majd ezt kódolva hasonlítják a tárolthoz. Ezzel a módszerrel ugyan mindig megtalálhatjuk a jelszót, de nem mindegy, hogy mennyi időt fektetünk be. A jelszavak tipikusan ne legyenek túl rövidek, ne legyen értelmes szó, és tartalmazzon kis és nagybetűket, számokat is. A biztonságos használat érdekében célszerű a jelszót bizonyos időközönként lecserélni.
A kliens oldalon leginkább a felhasználókat szabályozva védekezhetünk. Tudatosítani kell a felhasználóban, hogy mennyire fontos a jelszó titokban tartása. Nem engedhető meg neki, hogy azt leírva tárolja a számítógép közelében. Fel kell hívni a figyelmét arra, hogy ne engedje másoknak figyelni a billentyűzetet, miközben a jelszavát megadja. Az sem engedhető meg, hogy bárkivel telefonon közölje a jelszavát, még akkor sem, ha az a valaki esetleg az informatikai osztály alkalmazottjának mondja magát. A böngésző automatikus jelszóbeírásának használatát is érdemes tiltani. Ismertetni kell a felhasználókkal a jelszóválasztás fenti kritériumait. Amennyiben ezeket nem tartja be, akár büntető szankciókat is kilátásba helyezhetünk. Ilyen és ehhez hasonló szabályok alkalmazásával a kliens oldalt is biztonságosabbá tehetjük a belső támadásokkal szemben.
A felhasználók csak kódolt formában levelezzenek, továbbá a szerver is képes legyen kódolt levéltovábbításra. Ehhez szükséges programok pl. a gpg, vagy pgp, illetve szerveroldalon pl. postfix-tls (levéltovábbító).
  A szolgáltatás megbénítására irányuló támadások ellen a leghatékonyabb védekezés a hálózati eszközök paramétereinek figyelmes beállítása, s maga a számítógép erőforrásaihoz való hozzáférés megfelelő beállítása. Például TCP SYN elárasztás ellen Linux alatt az alábbi beállítás szükséges a /etc/network/options fájlban: syncookies=yes, és spoofprotect=yes.
A külső támadások ellen hálózatfigyelő, integritást ellenőrző programcsomagok használatával védekezhetünk. Ezen programok segítségével megoldódnak a szaglászásból származó problémáink, nyomon követhetjük adatforgalmunkat, titkosíthatjuk hálózati kapcsolatainkat, ellenőrizhetjük nyitott portjainkat. Óvatosan kell használni őket, mivel ugyanúgy használhatók védekezési és támadási célokra is. Két fő csoportjuk van, a sniffer-ek és a portscan-ek.
A „sniffing”, szaglászás igazából egy szinonimája annak, hogy egy a számítógépen futó program segítségével betekintést nyerhetünk az adott hálózat adatforgalmába. Ennek általában két célja lehet:
Hibaelhárítás, hálózati adatforgalom elemzés, analízis.
Felhasználói nevek és jelszavak jogosulatlan megszerzése.
Ezen programok működési alapja, hogy az adott számítógép a hálózatban nem csak a neki címzett csomagokra figyel, hanem az összes csomagra, mely a helyi hálózaton áthalad. Ezt a hálózati kártya ún. „promiscuous” üzemmódba történő átkapcsolásával lehet elérni. A snifferek futásának detektálása is a hálózati kártya promiscuous módjának beállításával függ össze. A detektorok működési elve a következő:
A program végig pingeli a lokális hálózatot, így megkapja az összes hálózati interfész IP illetve fizikai (MAC) címét. Ezután az ARP cache-ben, ahol az IP címek össze vannak rendelve a hálózati kártya fizikai címével, véletlenszerűen összekeveri a megfeleltetéseket, majd újra végig pingeli a hálózatot. Amelyik számítógép erre is válaszol, annak a hálózati interfésze biztosan promiscuous módba van állítva, persze ez még nem biztos, hogy azt jelenti, hogy ő sniffert futtat, mert akad másfajta program is, mely átállítja a hálózati interfészt.
A snifferek támadási célú felhasználása ellen az egyik leghatásosabb védekezési módszer az, ha az információkat kódolt formában küldjük át a hálózaton, így azokat a szaglászó programok nem tudják értelmezni, visszafejteni. A hálózati kommunikáció védelmével később, a 4. fejezetben foglalkozunk.
 A portpásztázás egy eljárás, mellyel megállapítható, hogy egy távoli számítógépen mely portok vannak nyitva, zárva, vagy tűzfallal védve. A portscan szabályos vagy szabálytalan kapcsolatot kezdeményezés az összes vagy csak a privilegizált portokra. Ezáltal feltérképeződnek a számítógép támadható portjai, vagy egyszerűen futó szolgáltatásokat lehet meghatározni vele.. Mivel az 1–1024 portok előre meghatározott portok (well-known-ports), azaz a portszámhoz szolgáltatást rendeltek, mint (pl.: 21 ftp, 22 ssh, 23 telnet stb.), így a portszámból következtethetünk a vizsgált számítógép szolgáltatásaira.
Működésük általában igen egyszerű, ha ismerjük a TCP/IP modellben a kapcsolatkialakítás menetét. A program küld a célszámítógép vizsgálandó portjának egy kapcsolat kezdetét, vagy kapcsolat lezárását biztosító csomagot, majd vár a válaszra, melyből ki tudja deríteni azt, hogy az adott portszámhoz tartozó szolgáltatás fut-e a figyelt számítógépen vagy nem. A nyitott portok számának kiderítése fontos a gép védelme szempontjából, ugyanakkor egy nagyon jó támpont a célszámítógép feltörési stratégiájának kidolgozásához is. A számítógépek ellen irányuló támadások ezen részének felderítése eléggé egyszerű, hiszen a legtöbb portscan program sorban és egymás után nagyon gyorsan teszteli a PC portjait, így ha egy adott gépről sok kapcsolat indul a célgép különböző portjaira, akkor ezen számítógépeket érdemes kitiltani a számítógépes hálózatunkból.
Sok rendszergazda rossz néven veszi, ha portscan alá veszik az általa felügyelt kiszolgálót. Általánosságban elmondható viszont, hogy a manapság elterjedt operációs rendszerek által implementált TCP és UDP protokollvermek ezen kapcsolódási kísérletektől nem omlanak össze, azok szoftverében kárt nem okoz.
A portscan egyes típusai [5]:
TCP connect() scan: a legalapvetőbb fajtája a pásztázásnak, amikor az operációs rendszer által nyújtott connect() rendszerhívást használjuk egy kapcsolat megnyitásához a minket érdeklő portokon. Ha a távoli gép vizsgált portján szolgáltatás elérhető, akkor a connect() hívás sikeresen lefut. Legnagyobb előnye, hogy nagyon egyszerű megvalósítani és használatához nincs szükség az adott operációs rendszeren  adminisztrátori jogosultságra. Másik előnye a gyorsaság. Míg egy portonkénti portscan a TCP időtúllépési mechanizmusa miatt sokáig is eltarthat, addig sok kapcsolatot párhuzamosan használva felgyorsíthatjuk a vizsgálatot.
TCP SYN scan: ezt a módszert gyakran nevezik „half open” ellenőrzésnek, mivel nem nyitunk meg egy teljes TCP kapcsolatot. Elküldünk egy SYN csomagot, majd választ várunk. Egy SYN/ACK esetén az adott porton egy szolgáltatás figyel, míg RST választ esetén a porton nem figyel szolgáltatás. Amennyiben SYN/ACK választ kapunk, feljegyezzük a port nyitott voltát, majd eltérően a szabványos TCP hívásfelépítéssel egy RST csomaggal zárjuk a félig felépült kapcsolatot. Ennek a módszernek előnye, hogy sokkal kevesebb helyen naplózzák az ilyen kísérletezéseket, ugyanakkor hátránya, hogy az adott rendszeren az alacsonyszintű csomagkezelés miatt rendszergazdai jogokkal kell futtatnunk a portscant.
TCP FIN scan: vannak helyzetek, amikor a SYN scan használata sem elég. Néhány tűzfal és csomagszűrő ugyanis figyeli az ilyen pásztázásokat is. A FIN csomagok viszont keresztüljuthatnak háborítatlanul. A módszer ötlete a következő: a zárt portoknak válaszolniuk kell a FIN csomagunkra egy megfelelő RST-vel. A nyitott portoknak azonban figyelmen kívül kell hagyniuk a kérdéses csomagokat. Ez elvárt TCP viselkedés. Ennek ellenére bizonyos gépek (például a Microsoft rendszerei) nem megfelelőek ebben a tekintetben. Ezen rendszerek RST-t küldenek, figyelmen kívül hagyva a port állapotát, más rendszerekkel viszont ez a vizsgálat jól működik. Valójában néha hasznos is lehet ez a tulajdonsága a különböző rendszereknek, erre a következő alfejezetben még visszatérünk.
UDP ICMP port nem elérhető - scan: az UDP datagram alapú protokol, semmilyen nyugtát, vagy hibaüzenetet nem kell válaszul küldenie egy kérésre. Szerencsére a legtöbb hálózati eszköz küld egy ICMP Port Unreachable (port elérhetetlen) hibát, amennyiben egy üzenetet küldünk egy lezárt UDP portra. Ezzel megtudhatjuk, hogy mely portok nincsenek nyitva, így kizárásos alapon, hogy melyek igen. Ebben az ellenőrzésbe be kell építenünk egy mechanizmust arra az esetre is, ha elvesznének csomagok, ebben az esetben ugyanis több fals pozitív találatunk lenne a nyitott portokra.
Egy hálózati eszköz operációs rendszerének felismerését ezen okok miatt tehát más módszerrel végzik. Az OS fingerprinting lényege, hogy a hálózati kommunikáció során olyan egyedi jellegzetességeket, „ujjlenyomatokat” keresnek az adatfolyamban, ami egyes rendszerekre jellemző, míg másokra nem. Ezen különbségek abból adódnak, hogy az egyes rendszerek fejlesztői az IETF de facto szabványainak, az RFC-knek [7] bizonyos ajánlásait másképpen értelmezik, vagy valamilyen indok alapján figyelmen kívül hagyják. Így egy hálózati kommunikáció alatt tucatnyi olyan árulkodó jelet találhatunk, mely csak bizonyos típusú rendszerekre jellemző. Ilyen jel volt az előző fejezetben említett TCP FIN scan esetén visszaküldött RST válasz. A továbbiakban ezen jelekből vesszünk sorra néhányat.
TCP FIN próba: ebben az esetben küldünk egy FIN csomagot (vagy bármilyen másikat ACK vagy SYN flag nélkül) és várjuk a reakciót. A helyes RFC793 viselkedés nem reagálni. A szabványtól eltérő rendszerek (mint például: MS Windows, a BSDI, a CISCO, a HP/UX, a MVS és az IRIX) egy RST-t küldenek vissza. A legtöbb távoli operáció rendszer detektáló eljárás alkalmazza ezt a próbát.
Hibás TCP flag próba: ez egy ötletes teszt melynek lényege egy definiálatlan TCP flag (64 vagy 128 értékű bitek) beállítása egy SYN csomag TCP fejlécében. A Linux rendszermagban megvalósított TCP verem egy adott verzióig (2.0.35-ig) ezt a flag-et megtartja beállítva a válaszban. Nem tudunk másik rendszerről, mely rendelkezik ezzel a hibával. Néhány rendszer azonban megszakítja a kommunikációt, ha ilyen csomagot kapnak.
TCP ISN mintavétel: ennek a tesztnek az ötlete, hogy találjunk szabályosságokat a TCP protokollverem által választott ISN (Initial Sequence Number, kezdeti azonosítószám) választásában, amikor kapcsolatkérésre kapunk választ (emlékeztető: ez az a véletlenről induló szám, melyet minden egyes üzenetváltáskor a TCP növel eggyel. Feladata megakadályozni, hogy egy TCP kapcsolatba illetéktelenül beékelődjenek csomagok, így helyes megválasztása kényes pontja lehet a rendszernek). Ezek a tapasztalatok csoportokba oszthatók mint például a tradicionális 64K (régi UNIX rendszerek), véletlen növekményű (újabb Solaris, IRIX, FreeBSD, Digital UNIX, Cray és sok másik rendszerek), valódi véletlen alapú (Linux 2.0.*, OpenVMS, újabb AIX, stb). Windows rendszerek egy időfüggő megoldást alkalmaznak, ahol az ISN minden időegység alatt meghatározott mértékben növekszik.
TCP kezdő ablakméret: az IP csomag fejlécében ez a szám mondja meg, hogy az adott gép mennyi fogadott csomag után küld vissza nyugtázást (ACK). Mivel ez egy, az operációs rendszerre jellemző konstans, sok rendszert be lehet azonosítani csupán ennek a számnak az ismerete alapján. Például az AIX az egyetlen operációs rendszer, ami  0x3F25 (16165) értéket alkalmazza. Az NT5-ben teljesen újraírt TCP veremben a Microsoft a 0x402E (16430). Érdekes módon ez ugyanaz az érték, amit az OpenBSD és FreeBSD rendszerek is alkalmaznak.
További próbák [8] az Nmap portscan program honlapján érhetőek el, mely ezen próbák alapján képes távoli operációs rendszer detektálásra is. Természetesen nem csak TCP alapú próbákat lehet végezni, például az ICMP protokollra is léteznek hasonló próbák.
Kérdéses, hogy van-e értelme védekezni a távoli operációs rendszer detektálás ellen, annak fényében, amit az 1.4. fejezetben a titkolózásra alapozott biztonság estén olvastunk.
Amennyiben mégis szükségét látjuk, hogy a kéretlen kíváncsiskodókat megtévesszük, Linux operációs rendszer estében lehetőségünk van különböző rendszermag foltokat telepítenünk [9]. Ezek a rendszermagban található TCP vagy egyéb protokollvermet úgy változtatják meg, hogy a távoli operációs rendszer detektálás során a rendszerre nem jellemző értékeket adjon vissza a kiszolgáló, megtévesztve ezzel a támadót.

Hyper-V szerepkör hozzáadása a Windows Serverben és virtuálisgép létrehozása

A Hyper-V szerepkör hozzáadása a Windows Serverben

  1. Kiszolgálókezelő a Kezelés menüjében kattintson a Szerepkörök és szolgáltatások hozzáadása elemre.
  2. Az Alapismeretek lapon ellenőrizze, hogy a célkiszolgáló és a hálózati környezet készen áll-e a kívánt szerepkör vagy szolgáltatás telepítésére. Kattintson a Tovább gombra.
  3. Telepítés típusának kiválasztása lapon válassza a Szerepköralapú vagy szolgáltatásalapú telepítés elemet, majd kattintson a Továbbgombra.
  4. Célkiszolgáló kijelölése lapon jelölje ki a kívánt kiszolgálót a kiszolgálókészletben, majd kattintson a Tovább gombra.
  5. Kiszolgálói szerepkörök kiválasztása lapon válassza a Hyper-V elemet.
  6. A virtuális gépek létrehozásához és kezeléséhez használt eszközök hozzáadásához kattintson a Szolgáltatások hozzáadása elemre. A Szolgáltatások lapon kattintson a Tovább gombra.
  7. Virtuális kapcsolók létrehozása, a Virtuális gépek áttelepítése és az Alapértelmezett tárak lapon válassza ki a megfelelő beállításokat.
  8. Telepítendő összetevők megerősítése lapon válassza a Célkiszolgáló automatikus újraindítása, ha szükséges elemet, majd kattintson a Telepítés gombra.
  9. A telepítés befejezésekor ellenőrizze a telepítést. Ehhez nyissa meg a KiszolgálókezelőMinden kiszolgáló lapját, válassza ki a kiszolgálót, amelyen telepítette a Hyper-V-t, majd tekintse meg a Szerepkörök és szolgáltatások csempét a kiválasztott kiszolgálóhoz tartozó lapon.
  1. A Vezérlőpulton kattintson a Programs, majd a Programs and Features elemre.
  2. Kattintson a Turn Windows features on or off parancsra.
  3. Kattintson a Hyper-V, az OK, majd a Close elemre.
Egy Windows PowerShell-munkamenet emelt szintű felhasználói jogosultságokkal való megnyitásához tegye a következők egyikét.
  • A Windows asztalon kattintson a jobb gombbal a tálcán található Windows PowerShell elemre, majd kattintson a Futtatás rendszergazdaként parancsra.
  • A Windows kezdőlapján írja be a Windows PowerShell nevének bármelyik részét. Kattintson a jobb gombbal a Windows PowerShell parancsikonjára, amikor megjelenik a kezdőlapAlkalmazások részének eredményeiben, majd kattintson a Speciális, végül a Futtatás rendszergazdaként parancsra. A Windows PowerShell parancsikonjának a kezdőlapon való rögzítéséhez kattintson a jobb gombbal a parancsikonra, majd a Rögzítés a kezdőképernyőre parancsra.
Install-WindowsFeature –Name Hyper-V -ComputerName <computer_name> -IncludeManagementTools -Restart 


Mielőtt elkezdené az eljárást, tekintse át az alábbi szempontokat. Nem kötelezők, de segíthetnek a megfelelő döntések meghozásában. Megfontolandó szempontok:
  • A virtuális gép neve. A névvel azonosítható a virtuális gép. Használhat például azt a kiszolgálótípust azonosító nevet, amelyet ezen a virtuális gépen szeretne konfigurálni, ilyen például a webkiszolgáló. Vagy használhat egy olyan nevet, amely a vendég operációs rendszert azonosítja.
  • Milyen hálózati kapcsolatokra lesz szüksége a virtuális gépnek? Kapcsolódnia kell az internethez a virtuális gépnek? További információ: Create a virtual switch.
  • Az operációs rendszer telepítésének módja. Telepítheti egy fizikai adathordozóról vagy egy lemezképfájlból (.iso). Olyan virtuális merevlemezt is használhat, amelyen már telepítve lett egy operációs rendszer.
Ha ezt a lépést a Windows PowerShell használatával hajtja végre, kövesse az alábbi, a Virtuális gép létrehozása című szakaszban található utasításokat.

Virtuális gép létrehozása


  1. Nyissa meg a Hyper-V kezelőjét.
  2. A Hyper-V kezelőjének navigációs ablaktábláján jelölje ki a Hyper-V rendszert futtató számítógépet.
  3. A Műveletek ablaktáblán kattintson az Új, majd a Virtuális gép elemre.
  4. Megnyílik az Új virtuális gép varázsló. Kattintson a Tovább gombra.
  5. Név és hely megadása lapon írja be a megfelelő nevet.
  6. Memória hozzárendelése lapon adjon meg elegendő memóriát a vendég operációs rendszer elindításához.
  7. Hálózatkezelés beállítása lapon csatlakoztassa a virtuális gépet a Hyper-V telepítésekor létrehozott kapcsolóhoz.
  8. Virtuális merevlemez csatlakoztatása és a Telepítési beállítások lapon adja meg a vendég operációs rendszer kívánt telepítési módjának megfelelő beállítást:
    • Ha a vendég operációs rendszert egy DVD-ről vagy egy lemezképfájlból (.ISO-fájlból) telepíti, válassza a Virtuális merevlemez létrehozása elemet. Kattintson a Tovább gombra, majd kattintson arra a lehetőségre, amely a használni kívánt adathordozó-típust azonosítja. Egy .iso-fájl használatához például kattintson az Operációs rendszer telepítése rendszerindító CD-ről vagy DVD-ROM-rólelemre, majd adja meg az .iso-fájl elérési útját.
    • Ha a vendég operációs rendszer már telepítve lett egy virtuális merevlemezre, válassza a Meglévő virtuális merevlemez használataelemet, és kattintson a Tovább gombra. Ezután válassza az Operációs rendszer telepítése később parancsot.
  9. Az Összegzés lapon ellenőrizze a beállításokat, majd kattintson a Befejezés gombra.
  10. New-VM –Name “web server” –MemoryStartupBytes 1GB –VHDPath d:\vhd\BaseImage.vhdx  

vendég operációs rendszer telepítése

  1. A Hyper-V kezelőjének eredményeket megjelenítő ablaktábláján található Virtuális gépek szakaszban kattintson a jobb gombbal a virtuális gép nevére, majd kattintson a Csatlakozás elemre.
  2. Megnyílik a Virtuálisgép-kapcsolat eszköz.
  3. A Virtuálisgép-kapcsolat ablak Műveletek menüjében kattintson az Indítás elemre.
  4. Elindul a virtuális gép, megkeresi az indítóeszközöket, és betölti a telepítési csomagot.
  5. Folytassa a telepítést.
  6. Az integrációs szolgáltatások telepítése vagy frissítése
    1. Nyissa meg a Hyper-V kezelőjét. A Kiszolgálókezelő eszközök menüben kattintson A Hyper-V kezelője elemre.
    2. Csatlakozzon a virtuális géphez. Az eredmények ablaktábla Virtuális gépek szakaszában használjon az alábbi módszerek egyikét:
      • Kattintson a jobb gombbal a virtuális gép nevére, majd kattintson a Csatlakozás elemre.
      • Jelölje ki a virtuális gép nevét. A Művelet ablaktáblán kattintson a Csatlakozás elemre.
    3. Megnyílik a Virtuálisgép-kapcsolat eszköz. A Virtuálisgép-kapcsolat Művelet menüjében kattintson Az integrációs szolgáltatások telepítőlemezének behelyezése elemre. Ez a művelet betölti a telepítőlemezt a virtuális DVD-meghajtóban.
    4. A telepítés alatt álló operációs rendszertől függően előfordulhat, hogy manuálisan kell elindítania a telepítést. Kattintson bárhova a vendég operációs rendszer ablakában, és keresse meg a CD-meghajtót. Használja a vendég operációs rendszernek megfelelő módszert a telepítési csomag indításához a CD-meghajtóról.
    5. A telepítés befejezését követően az összes integrációs szolgáltatás használható.
https://inf.mit.bme.hu/sites/default/files/homework/public/Virtualiz%C3%A1ci%C3%B3s%20technol%C3%B3gi%C3%A1k%20%C3%A9s%20alkalmaz%C3%A1saik/2011.%20%C5%91sz/virttech-2011-hyper-v.pdf

CSS alapismeretek 9B osztály

Nézzünk meg néhány egyszerű példát a css használatára.Szeretnénk, formázni az oldalt, hogyan kezdjünk hozzá?

egy egyszerű példa:

  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4. </head>  
  5. <body>  
  6. <h1><font size="4" color="#a00000">Alma</font></h1>  
  7. <p><font size="2" color="#00a000">Korte</font></p>  
  8. <h1><font size="4" color="#a00000">Dio</font></h1>  
  9. <p><font size="2" color="#00a000">Szilva</font></p>  
  10. <h1><font size="4" color="#a00000">Barack</font></h1>  
  11. <p><font size="2" color="#00a000">Meggy</font></p>  
  12. </body>  
  13. </html>  
Minden szöveg (h1) és bekezdés (p) esetén meg kellett határoznunk a megjelenést (font), ráadásul ezáltal sokkal kevésbé lett áttekinthető a HTML forrásunk. További probléma, hogy a betűk méretének meghatározására nincs más lehetőségünk (a szabvány szerint), csak az előre definiált (1-től 7-ig meghatározott) méretek közül kiválasztani a nekünk megfelelőt. Amennyiben egy bonyolultabb oldalról van szó, még áttekinthetetlenebbé válhat a forrás, bonyolultabbá téve az utólagos szerkesztést. Nem lehetne ezt a formázást egyszerűbben elérni? 

Stíluslapok használatával:
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!--  
  5.   h1 { font-size: 20px; color: #a00000; }  
  6.   p { font-size: 12px; color: #00a000; }  
  7.   --></style>  
  8. </head>  
  9. <body>  
  10. <h1>Bevezetés</h1>  
  11. <p>A vers...</p>  
  12. <h1>Tárgyalás</h1>  
  13. <p>A költő...</p>  
  14. <h1>Összefoglalás</h1>  
  15. <p>Végezetül</p>  
  16. </body>  
  17. </html>  

A trükk a fejlécben látható style elemeken belül van. Meghatározzuk, hogy a HTML állományban levő összes címsor (h1) elem és bekezdés (p) elem a fentiekben meghatározott kívánságainknak megfelelően jelenjen meg. Csak egyszer kellett ezt megtenni, továbbá a kódunk is sokkal átláthatóbb lett. A pontos méretet is meghatározhattuk, ezúttal pixelben megadva azt, de további mértékegységek is rendelkezésünkre állnak. Amennyiben valamiért utólag módosítanunk kell a megjelenést, egyből csak egy helyen kell ezt megtennünk, s mindenhol meg is változik. Az egyszerűbb szerkeszthetőségen és karbantarthatóságon kívül az így elkészített dokumentum sokkal kisebb méretű is lesz, gyorsabban letöltődik, kisebb adatforgalmat generál. Ha egy külső állományban helyezzük el a stílusdefiníciókat, akkor több dokumentum megjelenését is befolyásolni tudjuk egyszerre, továbbá ha a böngésző gyorsítótárazza a meghatározásokat, az adatforgalom tovább csökken. További előny, hogy az újabb böngészők egyre inkább támogatják a szabványokat, s ha mi is tartjuk hozzá magunkat, akkor egyre kisebb munkával egyre több látogató fogja pontosan ugyanúgy látni a honlapunkat (az eddigi "minden böngészőn megnézem, hogy jó-e" stílusú munkával szemben). Persze mint a korábbiakban is ki lett hangsúlyozva, csodát egyelőre a CSS-től se várjunk, de mindenképpen számíthatunk rá, hogy ez fogja meghatározni a jövő honlapjainak megjelenését. CSS hozzákapcsolása a HTML-hez

A fentiekben egy példát láttunk, hogyan kapcsolhatjuk a CSS-t a HTML állományunkhoz, hogyan határozhatjuk meg ennek a megjelenését. Lássuk a lehetőségek listáját (melyeket szabadon, akár keverve is használni tudunk):

Beágyazott stíluslap

Ezt láthattuk a fenti példában. A stílusleírást a HTML oldal fejlécében kell elhelyezni, style elembe ágyazva. A fenti példában HTML megjegyzésbe is tettük (<!-- ... -->), ezzel azt érjük el, hogy az olyan böngészők, amik nem ismerik a stíluslapokat, ne jelenítsék meg a stílus definíciónkat. Az így meghatározott stílus az egész dokumentumra érvényes lesz.

Külső stíluslap

A stíluslapunkat elhelyezhetjük egy külső állományban is, így lehetővé téve, hogy az több HTML állományra is érvényes legyen, s központilag szerkeszthetővé váljon (ne kelljen minden egyes HTML állományt megváltoztatnunk, ha a honlapunk ezentúl másképp jelenne meg). A külső stíluslapokra az oldal fejlécében tudunk hivatkozni, egy link elem segítségével:
  1. <head>  
  2.   <link rel="stylesheet" href="kulso.css" type="text/css">  
  3. </head>  
A stíluslapot tartalmazó állományban (a példában kulso.css a neve) csak a stíluslapjaink definícióját kell elhelyeznünk, pl:
  1. h1 { font-size20pxcolor#a00000; }  
  2. p { font-size12pxcolor#00a000; }  
A beágyazott stíluslapokhoz hasonlóan az így meghatározott stílus az egész dokumentumra érvényes.

Elemhez rendelt stíluslap

Bár kevés alkalommal van rá szükség, de akkor jól jön, hogy az egyes HTML elemekhez helyben is tudunk stílust meghatározni. Ez nagyon hasonlít ahhoz, mintha font elemekkel határoznánk meg az adott elem megjelenését, bár nagyságrendekkel több formázási lehetőségünk van. Egy elem stílusának a meghatározásához egy style attribútumot kell hozzá felvennünk:
  1. <h1 style="font-size: 20px; color: #a00000;">Bevezetés</h1>  
Mint láthattuk, itt csak magát a megjelenést kellett leírnunk, nem kellett meghatározni, hogy mire vonatkozik: az így definiált stílus csak az adott elemre, illetve az adott elemen belül lesz érvényes.

Importált stíluslap

További lehetőségünk, hogy egy stílus meghatározáson belül egy másik, külső stílus meghatározásra hivatkozzunk (erre értelem szerint a beágyazott és a külső stíluslap meghatározásoknál van módunk). Ez a következőképpen történhet:
  1. <style type="text/css"><!-- 
  2. @import url(http://www.honlapunk.hu/stilusok/masik.css); 
  3. --></style>  
A cím megadásakor hasonlóképpen járhatunk el, mint a linkeknél általában, azaz akár url(masik.css) formában is írhatjuk, amennyiben ugyanabban a könyvtárban található mint a HTML állományunk. A külső stílus hivatkozásnak meg kell előznie minden más definíciót, amennyiben már szerepel előtte más, figyelmen kívül lesz hagyva!

Stílusok formátuma

Egy önálló stílus definíciós állomány, vagy egy beágyazott stílus több meghatározást tartalmazhat. Egy-egy meghatározás két részből áll, egy kiválasztó és egy tulajdonság részből. A kiválasztó rész azt határozza meg, hogy mely HTML elemekre vonatkozzon a definíció, míg a tulajdonság rész a megjelenést befolyásolja. Amikor elemhez rendelünk stílust, akkor csak a tulajdonság részt kell meghatároznunk. A következőképpen épül fel tehát egy stílusdefiníció:
  1. kiválasztó { tulajdonság }  
  2. kiválasztó { tulajdonság }  
  3. kiválasztó { tulajdonság }  
Az egyes definícióknak, de még a kiválasztónak és a tulajdonságnak sem szükséges új sorban lenniük, gyakorlatilag szabadon ránk van bízva, hogy a fenti tartalmat milyen elrendezésben valósítjuk meg. A következő formátumok mind helyesek:
  1. kiválasztó { tulajdonság } kiválasztó { tulajdonság }  
  2. kiválasztó  
  3.   
  4.   {  
  5.   tulajdonság  
  6.   }  
Az előző példákban láthattuk, hogy egy-egy kiválasztóhoz több tulajdonságot is megadhatunk, ekkor a tulajdonságokat pontosvesszővel elválasztva kell felsorolnunk. Több kiválasztót is meghatározhatunk, a kiválasztókat vesszővel kell elválasztani:
  1. kiválasztó, kiválasztó { tulajdonság; tulajdonság; }  

Kiválasztók

A kiválasztók nagyon rugalmasan használhatóak, mint azt a továbbiakban látni fogjuk egyszerű és mégis összetett módon tudjuk meghatározni, hogy mely elemekre vonatkozzanak a tulajdonságaink. Ebben a cikkben még nem mutatjuk be az összes lehetőséget, de megpróbáljuk bemutatni, hogy milyen széleskörűen tudjuk szabályozni a kiválasztást.

Elem kiválasztás

A legegyszerűbb kiválasztási lehetőséget nyújtja a számunkra, egy HTML elemet határozhatunk meg vele, amihez hozzá szeretnénk rendelni a különböző tulajdonságokat. Az eddigiekben ilyenre láthattunk példát:
  1. h1, h2, h3 { color#a00000; }  
Itt az első három szintű címsornak határoztuk meg a színbeli megjelenését.

Osztály alapú kiválasztás

A HTML elemeket lehetőségünk van osztályokba sorolni. Ekkor az adott osztályba sorolni kívánt elemhez egy class tulajdonságot rendelünk hozzá, amelynek az értéke az osztálynevünk lesz. A stíluslapban ehhez az osztályhoz határozhatunk meg megjelenést. Ha szeretnénk kiemelni egyes fejezeteket a szövegünkből, pirossal megjelenítve azokat, akkor a következőképpen járhatunk el:
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!--  
  5.   h1 { font-size: 20px; color: #a00000; }  
  6.   p { font-size: 12px; color: #00a000; }  
  7.   .fontos { color: #ff0000; }  
  8.   --></style>  
  9. </head>  
  10. <body>  
  11. <h1>A cserebogarak halhatatlanságáról</h1>  
  12. <p class="fontos">A cserebogárnak vannak lábai. Ebből...</p>  
  13. <p>Minden cserebogárnak van lába...</p>  
  14. <p class="fontos">A cserebogárnak vannak szárnyai is...</p>  
  15. <p>A szárnyaival repülni tud...</p>  
  16. <p>A halhatatlanság azt jelenti, hogy...</p>  
  17. <h1 class="fontos">FONTOS!</h1>  
  18. <p class="fontos">A cserebogarak halhatatlansága tehát...</p>  
  19. </body>  
  20. </html>  
A példában három fejezetet és egy címsort soroltunk a fontos osztályba, a stíluslapban pedig a kiválasztónk ponttal kezdődött, ami azt jelezte, hogy ennek az osztálynak határozzuk meg a megjelenését. A példából még valami kiderül: az egyes stílusdefiníciók felül tudják bírálni egymást, illetve egy osztály bármelyik elemhez tartozhat. A fontos osztálynak mást színt adtunk meg, mint a bekezdéseknek, illetve a címsornak (itt ez a szín fog érvényesülni), míg a betűméretet tekintve a bekezdésben, illetve a címsorban meghatározott méretet öröklik a fontosnak besorolt bekezdések is.

Az egyes kiválasztókat keverhetjük is, például a következő példában a fontos címsoroknak definiálunk egy háttérszínt is:
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!--  
  5.   h1 { font-size: 20px; color: #a00000; }  
  6.   p { font-size: 12px; color: #00a000; }  
  7.   .fontos { color: #ff0000; }  
  8.   h1.fontos { background: #ffcccc; }  
  9.   --></style>  
  10. </head>  
  11. <body>  
  12. <h1>A cserebogarak halhatatlanságáról</h1>  
  13. <p class="fontos">A cserebogárnak vannak lábai. Ebből...</p>  
  14. <p>Minden cserebogárnak van lába...</p>  
  15. <p class="fontos">A cserebogárnak vannak szárnyai is...</p>  
  16. <p>A szárnyaival repülni tud...</p>  
  17. <p>A halhatatlanság azt jelenti, hogy...</p>  
  18. <h1 class="fontos">FONTOS!</h1>  
  19. <p class="fontos">A cserebogarak halhatatlansága tehát...</p>  
  20. </body>  
  21. </html>  

Azonosító alapú kiválasztás

Az azonosító alapú kiválasztás nagyon hasonló az osztály alapúhoz, egy lényeges különbség van: csak és kizárólag egy elemet tudunk egy bizonyos azonosítóval megjelölni egy HTML dokumentumon belül.
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!--  
  5.   h1 { font-size: 20px; color: #a00000; }  
  6.   p { font-size: 12px; color: #00a000; }  
  7.   #halhatatlan { color: #ff0000; }  
  8.   --></style>  
  9. </head>  
  10. <body>  
  11. <h1>A cserebogarak halhatatlanságáról</h1>  
  12. <p>A cserebogárnak vannak lábai. Ebből...</p>  
  13. <p>Minden cserebogárnak van lába...</p>  
  14. <p>A cserebogárnak vannak szárnyai is...</p>  
  15. <p>A szárnyaival repülni tud...</p>  
  16. <p>A halhatatlanság azt jelenti, hogy...</p>  
  17. <p id="halhatatlan">A cserebogarak halhatatlansága tehát...</p>  
  18. </body>  
  19. </html>  
A stíluslapban a kettőskeresztet használtuk az azonosításhoz, a HTML forrásban pedig az id tulajdonságot. A kiválasztókat itt is keverhetjük (bár mivel egy azonosító csak egy konkrét elemre vonatkozhat, ezért nincs rá szükség), a p#halhatatlan egy szabályos kiválasztó.

Helyzetérzékeny kiválasztás

A stíluslapban lehetőségünk van a HTML fában betöltött helye alapján meghatározni egy elemről, hogy hogyan nézzen ki. Kevésbé bonyolultan megfogalmazva: a helyzetérzékeny kiválasztásnál a fában egy adott elem alatt levő elemhez rendelhetünk stílust, például megmondhatjuk, hogy a táblázatokon belül levő félkövér betűk sötétkékek legyenek, miközben a normál bekezdésekben levőknek nem fog megváltozni a színe.
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!-- 
  5.   table b { color: #0000a0; } 
  6.   --></style>  
  7. </head>  
  8. <body>  
  9. <table border="1">  
  10. <tr>  
  11.   <th colspan="2"><b>cserebogarak</b> halhatatlanságáról</th>  
  12. </tr>  
  13. <tr>  
  14.   <td><b>cserebogárnak</b> vannak lábai. Ebből...</td>  
  15.   <td>Minden <b>cserebogárnak</b> van lába...</td>  
  16. </tr>  
  17. </table>  
  18. <p>Minden <b>cserebogár</b> bogár...</p>  
  19. </body>  
  20. </html>  
Mint a stílusdefinícióban láthatjuk, ilyenkor először azt az elemet kell leírnunk, amin belül (table), majd egy szóközt követően azt, amire (b) szeretnénk megadni a stílust. Több szintet is felölelhet a kiválasztónk, pl. használhatunk table tr b formát is, illetve keverhetjük a korábbiakban megismert kiválasztokat kedvünkre: table.fontos tr#egyedi b.

Szülő-gyermek kiválasztás

A szülő-gyermek kiválasztás abban különbözik a helyzetérzékeny kiválasztástól, hogy az elemeknek a fában betöltött helye szerinti közvetlen szülő-gyermek kapcsolata esetén tudjuk megadni a stílusmeghatározását. Az előző példánál maradva itt külön meg kell mondanunk azt, hogy a td és a th elemeken belüli b elemek esetén szeretnénk a színt megadni:
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!-- 
  5.   th>b, td>b { color: #0000a0; } 
  6.   --></style>  
  7. </head>  
  8. <body>  
  9. <table border="1">  
  10. <tr>  
  11.   <th colspan="2"><b>cserebogarak</b> halhatatlanságáról</th>  
  12. </tr>  
  13. <tr>  
  14.   <td><b>cserebogárnak</b> vannak lábai. Ebből...</td>  
  15.   <td>Minden <b>cserebogárnak</b> van lába...</td>  
  16. </tr>  
  17. </table>  
  18. <p>Minden <b>cserebogár</b> bogár...</p>  
  19. </body>  
  20. </html>  
Az egyes elemeket itt most nem szóközzel, hanem nagyobb jellel választottuk el. Itt is lehet több szinten keresztüli kiválasztást leírni, például tr>th>b, amennyiben ez számunkra a megfelelőbb, illetve keverni a korábban megismert lehetőségeket. A szülő-gyermek kiválasztást a CSS szabvány újabb, második verziója, ezáltal az újabb böngészők támogatják csak!

Tulajdonság alapú kiválasztás

Előfordulhat, hogy egy adott paraméterének megléte, vagy annak az értéke szerint szeretnénk egy HTML elemhez kiválasztást rendelni, például szeretnénk csak a jelszó beviteli mezőkben a csillagok színét megváltoztatni:
  1. <html>  
  2. <head>  
  3.   <title>CSS példa</title>  
  4.   <style type="text/css"><!-- 
  5.   input[type="password"] { color: #0000a0; } 
  6.   --></style>  
  7. </head>  
  8. <body>  
  9. <form>  
  10. Név: <input name="name">  
  11. Jelszó: <input type="password" name="pwd">  
  12. </form>  
  13. </body>  
  14. </html>  
A fenti példában látható, hogy a HTML elem neve után szögletes zárójelben a paraméter neve, majd az értéke következik. Lehetőségünk van a paraméter meglétére, a paraméter értékére, illetve a paraméter értékében szereplő jelsorozatra keresni:
  1. input[type] { ... }  
  2. input[type="password"] { ... }  
  3. input[type~="pass"] { ... }  
A tulajdonság alapú kiválasztást a CSS szabvány újabb, második verziója, ezáltal az újabb böngészők támogatják csak!

Összefoglalás

Egyelőre még csak elkezdtünk ismerkedni a CSS-sel, a megadásuk lehetőségeit, illetve az egyszerűbb kiválasztók használatát tanultuk meg. A kiválasztók bármilyen formában keverhetőek (ahogyan fentebb is láttunk pár példát rá), ezáltal nagyon rugalmasan használhatóak. A következő lépés annak bemutatása lesz, hogy milyen lehetőségeink vannak egy elem megjelenésének a befolyásolására, azután, hogy kiválasztottuk a most megismert kiválasztók valamelyikének segítségével. Ennek a cikksorozatnak a keretében a tervek szerint nem fogunk rá kitérni, de jó azt is tudni, hogy nem csak HTML, hanem például XML dokumentumok, interfészek (pl. XUL) megjelenésének a befolyásolására is használható eszközzel ismerkedünk éppen meg.
 http://weblabor.hu/cikkek/cssalapjai1

Bekezdések megjelenése

Betűkészletek

Adott elemeken állítani tudjuk a betűkészletet, a stílust, módosítást, súlyozást méretet.
Betűtípus
  1. body { font-familyArialHelveticasans-serif; }  
A példában az egész dokumentumra beállítjuk, hogy milyen betűkészlet legyen az alapértelmezett. Érdemes több, hasonló betűkészletet is felsorolni, illetve a lista végére egy általános betűkészletet is elhelyezni az adott családból. Az általános betűkészletek a következők lehetnek: serif, sans-serif, cursive, fantasy, monospace.
Stílus
Egy font dőltségét befolyásolhatjuk, példánkban az egész dokumentumra adtuk meg, hogy dőltek legyenek a betűk. További lehetőségeink: normal, italic, oblique.
  1. body { font-styleitalic; }  
Súlyosság
A példában félkövér betűkészletet állítunk be a HTML dokumentumra. Lehetőségeink: lighter, normal, bold, bolder, illetve 100-tól 900-ig a számok 100-asával (egyre vastagabb betűkészletet választva).
  1. body { font-weightbold; }  
Méret
A HTML dokumentum alapértelmezett betűtípusának a méretét határoztuk meg a példában. A konkrét méretmegadásnál több lehetőségünk is van, lehetséges pixelben (mint a példában), pontban (pt-t kell írni), százalékban, szövegesen (xx-small, x-small, small, medium, large, x-large, xx-large, smaller, larger) megadni a méretet. A lehetséges mértékegységekre egy következő cikkben még részletesebben is ki fogunk térni.
  1. body { font-size14px; }  
Csoportos megadás
Lehetőségünk van a fentieket egy paraméterként is átadni:
  1. body { fontitalic bold 14px ArialHelveticasans-serif; }  

Szöveg paraméterek

A szöveg színét, sűrűségét, igazítását, aláhúzását, behúzását állíthatjuk, továbbá konvertálhatjuk a szöveget különböző formára (kisbetűs, nagybetűs, stb.). Pár példa:
  1. h1 { colorblack; }  
A 1. szintű címsor színét feketére állítjuk. Lehetőségünk van #ffffff hexadecimális formában is megadni a színt (a mértékegységek mellett a lehetséges színmegadási módokat is be fogjuk mutatni még).
  1. h1 { letter-spacing10px; }  
A címsor betűi közötti távolságot növeltük meg 10 képponttal. Lehetőségünk van növelni és csökkenteni a távolságot.
  1. h1 { text-aligncenter; }  
A címsor igazítását adjuk meg, lehetőségünk van balra, középre és jobbra igazítani, valamint sorkizártra beállítani a stílust (left, center, right és justify rendre a megfelelő értékek).
  1. a { text-decorationnone; }  
A példában a link dekorációjaként nem adtunk meg semmit, azaz felülbíráltuk az alapértelmezett aláhúzást. A lehetséges értékek: none, underline, overline, line-through, blink lehetnek, melyek rendre díszítetlen, aláhúzott, felülhúzott, áthúzott és villogó értékeket állítanak be.
  1. p { text-indent40px; }  
A bekezdések első sorának behúzását állíthatjuk ennek a paraméternek a segítségével.
  1. h1 { text-transformuppercase; }  
A stíluslap hatására az 1. szintű címsorunk végig nagybetűvel fog megjelenni. Lehetséges értékek: none, capitalize, uppercase és lowercase, melyek rendre: módosítatlan, első betű nagy, összes betű nagy és összes betű kicsi jelentésűek.
  1. h1 { text-shadow5px 5px 3px #000000; }  
A tulajdonság hatására egy árnyékot rajzol a böngészőnk a szöveg köré. A pozíciók megadása nem kötelező, a sziné igen. Az egyes értékek jelentése rendre: lefele való távolság, jobbra való távolság, elmosottság sugara, szín. A távolságok negatív értéket is felvehetnek.
  1. p { white-spacenowrap; }  
A szóközök, tabulátorok kezelését állíthatjuk a white-space attribútummal. A normal a sorvégeken tördeli a szöveget, a nowrap nem enged sortörést, míg a harmadik lehetséges érték, a pre megtartja egy az egyben a sortöréseket, szóközöket, tabulátorokat (mint a pre HTML elemnél).
  1. p { word-spacing10px; }  
A szavak közötti távolságot vezérelhetjük ennek a paraméternek a segítségével. Lehetőségünk van negatív értékek megadására is.
  1. p { line-height20px; }  
A sormagasságot állíthatjuk vele egy paragrafuson belül. Célszerű a betűink méreténél nagyobb sormagasságot beállítani, különben összecsúsznak a sorok.
  1. .super { vertical-alignsuper; }  
A tulajdonsággal az elem függőleges pozícióját tudjuk szabályozni. Egy cellán belül a HTML nyelv td elemének valign tulajdonságához hasonlít, azonban szöveg környezetben (például egy div-en belül) a betűkhöz, és nem a befoglaló blokk méreteihez viszonyított igazítást állítja. Az értékei lehetnek: sub, super, baseline, text-top, text-bottom, middle, top, bottom. A példában egy felső index pozíció beállítását láthatjuk.

Dobozok megjelenése

A legtöbb HTML elem egy dobozba foglalható, és ezzel kapcsolatosan különböző tulajdonságai állíthatóak. Az alábbi ábra egy általános HTML elem megjelenését mutatja be.

Doboz modell

Négy oldala van, a felső, az alsó, a bal oldali és a jobb oldali. Mindegyik oldalnak van margója (1), kerete (2) és kitöltése (3). A margó a befoglaló doboz legszéle és a keret közötti távolságot állítja be. A keret a margó és a kitöltés között található. Végül a kitöltés a keret és a tartalom között helyezkedik el. Mindegyik lehet akár 0 pixel szélességű is, ekkor egyszerűen nem jelennek meg. A tartalom és a kitöltés által meghatározott terület hátterének színe állítható, illetve képet is el lehet helyezni rajta.

Az elemeknek van magasság (4) és szélesség (5) tulajdonsága is. Ezek a szabvány szerint az adott keret külső részétől az átellenes keret külső részéig értendőek. Erről sajnos a jelenleg domináns böngésző valamiért nem tud (kivéve 6-os verziójának kompatibilis módját), és a teljes dobozszélességet, illetve dobozmagasságot érti ezen tulajdonságok alatt.

Egy soron belüli elemnek is megadhatjuk a fenti értékeket, viszont előfordulhat, hogy több sorban jelenik meg. Ekkor az alábbi jelenséget figyelhetjük meg:

Doboz modell soron belül

Ahogy a képen látható, a piros keretű doboz középen (az elválasztásnál) kettétörik, és a keret (illetve a másik két tulajdonság) mindkét sorban hat, viszont a törésnél, azaz a sorok megfelelő szélénél nem. Ha több sorba kerül az elemünk aminek ezeket a tulajdonságokat megadtuk, akkor több helyen is kettétörik a doboz.

Háttér

A háttér színét vezérelhetjük segítségével, továbbá elhelyezhetünk képet háttérként, s annak tulajdonságait (elhelyezkedését, ismétlődését, mozgását) állíthatjuk be. A betűkhöz hasonlóan egy definícióban is, és külön-külön is szabályozhatjuk az tulajdonságokat.
  1. body { background-colorwhite; }  
Fehérre állítja a háttér színét. Természetesen a színt hexadecimális formában (#ffffff) is megadhatjuk.
  1. body {  
  2.  background-imageurl(hatter.gif);  
  3.  background-positiontop left;  
  4.  background-attachmentscroll;  
  5.  background-repeatrepeat;  
  6.  }  
A példa a háttérnek megadja a hatter.gif-et (lehetne még none is megadva, ekkor csak a színezés maradna), a bal felső sarokhoz igazítja, beállítja, hogy amikor görgetjük az oldalt, akkor a háttér is mozogjon, s végül még azt, hogy ismétlődjön a háttérkép. A background-position (elhelyezkedés) értékei lehetnek szövegesek: top left, top center, top right, center left, center center, center right, bottom left, bottom center, bottom right, illetve százalékosak (pl. 12% 34%) és pixelben megadottak (pl. 12px 34px). A background-attachement (a rögzízettséget szabályozza) értéke lehet fixed és scroll, az előbbinél nem mozdul a háttér, az utóbbinál pedig a görgetéssel együtt mozog. Az ismétlődést befolyásoló background-repeat négy értéket vehet fel: repeat, repeat-x, repeat-y, no-repeat, melyekkel mindkét, csak az egyik, vagy egyik irányban sem történő ismétlődést érhetünk el.

A háttér paraméterek egy összevonó background paraméterrel:
  1. body { backgroundwhite url(hatter.gif) no-repeat fixed center center; }  
Ebben az esetben mivel a képnek no-repeat értéket adtunk ismétlésül, a fennmaradó területen a háttér fehér színű lesz.

Keretek

A stíluslapok segítségével lehetőségünk van különböző stílusú keretet adni a kiválasztott HTML elemeinknek.
  1. p { border2px solid blue; }  
A fenti példában 2 képpont széles, sima és kék keretet adtunk minden bekezdésnek. Az első fenti paraméter a keret szélességét, a második a keret stílusát (none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset), a harmadik pedig a színét adja meg. Az egyes paraméterek elhagyhatóak, de általában szükséges mind.

Lehetőségünk van a keretek mind a négy oldalon külön-külön történő beállítására is, ezekre mutat példát az alábbi definíció:
  1. p {  
  2.  border-left1px solid red;  
  3.  border-top3px double blue;  
  4.  border-right3px dotted green;  
  5.  border-bottom3px dashed black;  
  6.  }  
Bal oldalt egy képpont széles piros, felül 3 képpontnyi két vonalas (vonalanként 1-1 képpontos) kék, jobb oldalt 3 képpontos pontozott zöld és végül alul 3 képpontos szaggatott vonalas fekete keretet kap minden bekezdés.

Körvonalak

A körvonalak a keretekhez nagyon hasonlóan működnek, ellenben az elem méretét nem befolyásolják, mindig körülötte és felette (előtte, azaz eltakarják mindenképpen a doboz tartalmát) jelennek meg, helyet nem foglalnak. A legegyszerűbb talán a fókusz példáját felhozni, mely ehhez nagyon hasonló: mikor egy beviteli elem (például gomb) aktív, akkor körülötte az operációs rendszer egy körvonallal jelzi, hogy fogadja a felhasználói bevitelt.

A körvonalak és a keretek további különbsége, hogy nem lehet a négy oldalon külön-külön megadni és hogy nem csak négyzetes alakú lehet.

De lássuk azokat a tulajdonságokat, melyekkel befolyásolni tudjuk a körvonal megjelenését!
  1. p { outline-width2px; }  
  2. p { outline-stylesolid; }  
  3. p { outline-color#000000; }  
Az outline-width tulajdonság segítségével a körvonal szélessége adható meg, az outline-style a stílust definiálja, míg az outline-color a körvonal színét állítja be. A stílusnál a kereteknél bemutatott stílusok használhatóak.

Lehetőség van egy tulajdonság segítségével beállítani a három tulajdonságot, ekkor opcionálisan és bármilyen sorrendben megadhatjuk az outline után ezeket:
  1. p { outline2px solid #000000; }  

Margók

Az egyes elemek a kereten (legyen az akár 0 képpontnyi) kívüli helyfoglalását szabályozhatjuk a margók segítségével.
  1. p { margin0px 1px 2px 3px; }  
A fenti példában felül 0, jobbra 1, alul 2 és bal oldalt 3 képpontnyi margót állítunk be a bekezdésnek. A négy paraméter helyett használhatunk egyet is, ilyenkor mind a négy oldalon azonos margót kapunk:
  1. body { margin0px; }  
Ha csak két értéket adunk meg paraméterként, akkor az első paraméter a függőleges, a második paraméter pedig a vízszintes irányú margókra fog vonatkozni:
  1. body { margin10px 0px; }  
Lehetőségünk van a margók mind a négy oldalon külön-külön történő beállítására is, ezekre mutat példát az alábbi definíció:
  1. p {  
  2.  margin-left3px;  
  3.  margin-top0px;  
  4.  margin-right1px;  
  5.  margin-bottom2px;  
  6.  }  
Ezzel a definícióval ugyanazt az eredményt kapjuk, mint a legelső margós példánál bemutatottal.

Kitöltés

Az egyes elemek a kereten (legyen az akár 0 képpontnyi) belüli helyfoglalását szabályozhatjuk a kitöltések segítségével.
  1. p { padding0px 1px 2px 3px; }  
A fenti példában felül 0, jobbra 1, alul 2 és bal oldalt 3 képpontnyi kitöltést állítunk be a bekezdésnek. A négy paraméter helyett használhatunk egyet is, ilyenkor mind a négy oldalon azonos margót kapunk:
  1. body { padding5px; }  
Ahogy a margóknál, itt is lehet csak két értéket megadni paraméterként, ahol az első paraméter a függőleges, a második paraméter pedig a vízszintes irányú kitöltést szabályozza:
  1. body { padding10px 0px; }  
Lehetőségünk van a kitöltések mind a négy oldalon külön-külön történő beállítására is, ezekre mutat példát az alábbi definíció:
  1. p {  
  2.  padding-left3px;  
  3.  padding-top0px;  
  4.  padding-right1px;  
  5.  padding-bottom2px;  
  6.  }  
Ezzel a definícióval ugyanazt az eredményt kapjuk, mint a legelső kitöltéses példánál bemutatottal.

Listák megjelenése

A listák két különböző HTML elemek egymásba ágyazásából állnak össze. A külső elem lehet ul, ol és dd elem, melyben li, illetve dt elemek kapnak helyet. Mind a külső, mind a belső elemek saját margóval, kerettel és kitöltéssel rendelkeznek. A belső listaelemek listajelölő grafikájának megjelenítésekor a különböző böngészők kicsit eltérően viselkednek, egy részük a külső elem bal felének megfelelő szélességű margót, másik részük pedig megfelelő szélességű kitöltést ad, majd ezen a területen jeleníti meg a grafikát (a dd-dt páros esetén alapértelmezett esetben nem jelenik meg grafika, de a megfelelő margókkal rendelkezik). A grafika megjelenítése a belső listaelemeken kívülről áthelyezhető belülre egy tulajdonság segítségével.

Listaelemek

A listák megjelenését tudjuk szabályozni a következőkben bemutatott paraméterekkel. Lehetőségünk van képet rendelni a listaelemekhez, vagy egy előre meghatározott listából választani, továbbá befolyásolhatjuk az egyes listaelemek előtt álló jelek helyzetét. Lehetőségünk van mindezt egy paraméterrel, illetve külön-külön is állítani:
  1. ul { list-stylesquare inside url(pont.gif) }  
  2. ul { list-style-positioninside }  
  3. ul { list-style-typedisc }  
  4. ul { list-style-imageurl(pont.gif) }  
Az első sor az egy paraméterként megadott szabályozást mutatja be. Egy kép fog megjelenni minden listaelem előtt, s a képet a szöveggel együtt fogja behúzni. Ha azt szeretnénk, hogy a kép ne legyen behúzva, akkor outside paramétert kell megadnunk. A fenti példában, mivel a kép meg van adva, s bár azt is meghatároztuk, hogy négyzet (square) legyen a jel, ezt felül fogja bírálni a kép. Mindazonáltal a jelet is meg kell adnunk, enélkül ugyanis nem jelenik meg a kép...

A második sorban a jel behúzásának szabályozó paramétert mutatjuk be, ahogy az előbb is említettük, itt állhat értékül inside és outside. A harmadik sor a jelet szabályozza. Itt széles választási lehetőségünk van: none, disc, circle, square, decimal, decimal-leading-zero, lower-roman, upper-roman, lower-alpha, upper-alpha, lower-greek, lower-latin, upper-latin, hebrew, armenian, georgian, cjk-ideographic, hiragana, katakana, hiragana-iroha, katakana-iroha - persze nem mindegyik böngésző támogatja az összes jelet. Végül az utolsó sorban a képre cserélését láthatjuk a lista jelének - mégegyszer kihangsúlyozzuk, ha szeretnénk, hogy a kép megjelenjen, meg kell adnunk a jel típusát is.

A következő két ábra a list-style-position tulajdonság hatását mutatja be, az elsőn az outside, alapértelmezett érték esetén történő megjelenítés látható, míg a másodikon az inside érték beállításával.

Lista pozíció - kívül

Lista pozíció - belül

Összefoglalás

Nos, még korántsem értünk a végére a cikksorozatnak, de talán már az eddig bemutatott ismeretanyagból is látszik, hogy rengeteg lehetőségünk van, ha a HTML állományunk megjelenését szeretnénk befolyásolni.

A cikksorozat következő részeiben megismerkedünk a CSS mértékegységekkel (távolságok, színek, stb.), további kiválasztási lehetőségekkel, pár további paraméterrel, továbbá számos tippel és trükkel, melyek segítségével felfedezhetjük a CSS technológia szépségeit. 
http://weblabor.hu/cikkek/cssalapjai2

További kiválasztók

A korábbiakban megismerkedtünk az elem, osztály, azonosító és tulajdonság alapú, továbbá a helyzetérzékeny és szülő-gyermek kapcsolatú kiválasztókkal. Ezek azok a kiválasztók, melyek kézzelfogható blokkokat jelölnek ki: egy-egy elemet annak paraméterként rögzített tulajdonságaitól függően. Ezeken túl azonban léteznek az úgynevezett látszólagos (virtuális) kiválasztók is, melyek vagy az adott elem egy részére illenek (látszólagos elemek), vagy az adott elem állapotától teszik függővé a kiválasztást (látszólagos osztályok). Ebben a részben ezeket fogjuk áttekinteni.

Linkekkel kapcsolatos látszólagos kiválasztók

Aki már egy kicsit is foglalkozott HTML-lel, készített, vagy egyszerűen csak látogatott már weboldalakat, biztosan tudja, hogy a linkek más-más színnel jelennek meg, ha már voltunk az általuk mutatott oldalon, illetve ha még nem. Ezekre a színekre a HTML-ből, a body elem tulajdonságainak (link, vlink) állításával is hatással lehetünk, azonban CSS-t használva, sokkal több lehetőségünk lesz. Látszólagos kiválasztókkal ugyanis külön-külön meghatározhatjuk a megjelenésüket! Ezeket a kiválasztókat a következőképpen használhatjuk:
  1. a         { color#0000FFtext-decorationunderline; }  
  2. a:link    { text-decorationnone; }  
  3. a:visited { font-styleitalic; }  
Az első sor semmi különöset nem tartalmaz, egy link elemnek határozzuk meg a stílusát. A második sorban azokat a linkeket választjuk ki, melyeket még nem látogattunk meg, a harmadik sorban pedig azokat, melyeket már meglátogattunk (nemrég). A két tulajdonság értelemszerűen kizárja egymást.

Dinamikus látszólagos kiválasztók

A HTML dokumentumokat az ember nem szokta egy ültő helyében elolvasni, majd otthagyni. Az egész lényege valahol a dinamizmus: linkekre kattingatunk, adott esetben form elemeket használunk, stb. Az internet már interaktív média, és erre a CSS-t is felkészítették. No, nem kell bonyolult dolgokra gondolni, az eszköztárunk a következő lehetőségeket tartalmazza: az egérkurzor az adott elem felett van, az adott elem éppen aktív, továbbá ha az adott elem éppen fókuszban van.
  1. input        { font-size12pxborder1px solid #000000background#ffffff; }  
  2. input:hover  { border1px solid #0000FF; }  
  3. input:active { font-weightbold; }  
  4. input:focus  { background#dddddd; }  
Az első sorban itt sem tettünk semmi különöset, a beviteli mezők tulajdonságait határoztuk meg. A második sorban levő :hover kiválasztó akkor fog működni, ha az adott mező felé visszük az egérkurzort, ekkor kék színnel jelenik meg a kerete. A harmadik sorban azt határozzuk meg, miként jelenjenek meg az aktív elemek. Hogy mit értünk aktív elemen? Azt, amelyikkel éppen csinálunk valamit. Például "megragadjuk", azaz lenyomva tartjuk az egérkurzort, vagy éppen lenyomunk egy gombot, stb. Példánkban ilyenkor az elem betűi vastaggá válnak. Végül a negyedik sorban azt definiáljuk, mi történjen, mikor éppen ki van választva az elemünk, rajta van a fókusz, ebben az esetben éppen a kurzor villog az input mezőnkben. Ehhez a :focus kiválasztóhoz rendelt tulajdonságunkkal éppen azt határoztuk meg, hogy a háttérszíne legyen világosszürke. Fontos megjegyezni, hogy bár a példában éppen beviteli mezőt láttunk, de ez a tulajdonság például a linkekre ugyanúgy működik, mint a közönséges bekezdésekre, vagy más elemre!

Elemszerű látszólagos kiválasztók

A CSS lehetőséget biztosít kiválasztanunk egy-egy elem tartalmának csak bizonyos részeit, mintha azok külön-külön definiált elemek lennének. Ezekkel a látszólagos kiválasztókkal az adott elem első karakterét, vagy akár az első sorát is kiválaszthatjuk.
  1. p:first-letter { font-size300%; }  
  2. p:first-line   { color#000080; }  
Így az adott betű, vagy az adott sor teljesen úgy fog viselkedni, mintha osztály alapú kiválasztással, például egy div vagy egy span elemmel határoltuk volna. A példa első sora egy bekezdés első betűjének kiválasztását (3-szor nagyobb lesz, mint a bekezdés többi betűje), míg a második sor egy bekezdés első sorának (sötétkék színű lesz) kiválasztását mutatja be.

Első gyermek látszólagos kiválasztó

További lehetőségünk egy adott gyermek elemről eldöntenünk, hogy első-e a sorban. Azaz például ha a body elemen belül szeretnénk, hogy az első (bevezető) bekezdésünk vastagon legyen szedve, a first-child látszólagos osztály kiválasztó ad nekünk lehetőséget erre:
  1. body > p:first-child { font-weightbold; }  
Fontos megjegyeznünk, hogy ha a body dokumentumunkban az első bekezdésünk előtt van egy másik elem (például h1), akkor ez a kiválasztás már nem működik. Azaz nem az első bekezdés elemet, hanem az első bekezdést, amennyiben az az első gyermek elem is, választja ki ez a kiválasztó. Természetesen a következő definíció is elégséges lett volna:
  1. p:first-child { font-weightbold; }  
A különbség a két kiválasztó között, hogy ez utóbbi egy táblázatban levő bekezdés elemekre is illeszkedik, míg az előző csak a közvetlenül a body-ban levőkre.

Nyelv szerinti látszólagos kiválasztó

A HTML-ben, de más leíró nyelveknél is, lehetőségünk van meghatározni hogy milyen nyelven íródott az adott dokumentum (HTML-nél meta elem a fejlécben), vagy adott elemekre is külön definiálhatjuk ezeket. A CSS biztosít számunkra erre is kiválasztót. Hogy a gyakorlatban mire jó ez (amellett, hogy az angol szavakat pirossal, a németeket kékkel, stb. írhatjuk), egyetlen épkézláb példát találtam, meg lehet határozni a segítségével, hogy milyen idézőjelek szerepeljenek a dokumentumban. Ehhez egy speciális tulajdonság elemet használatunk fel, a quote-ot. Íme:
  1. :lang(hu) > q { quotes'\201E' '\201D' }  
  2. :lang(en) > q { quotes'"' '"' }  
Ha a dokumentumunk Content-Language értéke hu, azaz magyar nyelvű dokumentumról van szó, akkor az idézőjelek alul és felül jelennek meg, míg angol nyelvű dokumentumok esetén mind a kettő felül - ha q elemet használunk az idézésekhez.

Elem előtt és után...

Végezetül lássuk a :before és :after kiválasztókat. Ezek segítségével az adott elem előtti és mögötti látszólagos részeket választjuk ki (fontos: nem az előtte levő elemeket, hanem az elem és az előtte levő elem közötti 0 hosszúságú részt). Több trükköt is meg lehet vele valósítani, egy egyszerű, de nagyszerű például:
  1. b:before { content'<b>'; }  
  2. b:after  { content'</b>'; }  
Ezzel a dokumentumunkban láthatóvá válnak a b elemeink, "mintha" a HTML forrást néznénk.

Összefoglalás

Az eddigi részekben gyakorlatilag áttekintettük az összes kiválasztót, illetve azokat a tulajdonságokat, melyeket általában használni szokás a weblapok készítésekor. A következő részben befejezzük a gyakran használt tulajdonságok áttekintését is, hogy utána még izgalmasabb dolgokkal foglalkozhassunk.