Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Adatbázis jegyzet

szalonna
March 24, 2014

Adatbázis jegyzet

szalonna

March 24, 2014
Tweet

Other Decks in Education

Transcript

  1. Sebestyén József 2014 2 Szerver-kliens kommunikáció A szerver és a

    kliens között HTTP protokollt használó, kérés-válasz felépítésű kommunikáció zajlik, azaz a szerver csak akkor küld adatot a kliensnek, ha az kéréssel fordul hozzá. A szerver az adott kérést értelmezve elküldi a megfelelő erőforrást a kliensnek, legyen az HTML oldal, kép, vagy más jellegű adat. A kommunikáció állapotmentes, minden kérés a szerver felé egyedi, a szerver nem tartja számon, hogy érkezett-e már korábban kérés az adott klienstől. HTTP: Hyper Text Transfer Protocoll HTML: Hyper Text Markup Language HTTP metódusok • GET: az URL-ben láthatóak az átadott paraméterek, például: http://www.google.com/search?q=cica • POST: az átadott paraméterek a HTTP fejlécekben utaznak, például: POST /test/demo_form.php HTTP/1.1 Host: w3schools.com name=dug&password=squirrel
  2. Sebestyén József 2014 3 HTML űrlap Példa egy űrlapra: <form

    method=”post”> <input name=”username” type=”text” placeholder=”Felhasználónév”> <input name=”password” type=”password” placeholder=”Jelszó”> <input name=”formid” type=”hidden” value=”loginform”> <button type=”submit”>Bejelentkezés</button> </form> method: az adatok elküldéséhez használt HTTP metódus input: beviteli mező name: a mező neve, ez lesz a kulcs-érték párok kulcsa type: a beviteli mező típusa, text a szöveg, password a jelszó, hidden a láthatatlan, stb., illetve gomb típusa (egyszerű vagy űrlap elküldő) placeholder: üres mező esetén az alapértelmezett felirat (nem alapértelmezett érték) value: (alapértelmezett) érték
  3. Sebestyén József 2014 4 Űrlapok feldolgozása PHP-ben A PHP értelmező

    speciális változókban tárolja a beérkezett kérések paramétereit. A paraméterek a következő változónevekkel ellátott asszociatív tömbökben találhatóak: $_GET: a GET metódussal küldött adatokat tartalmazza $_POST: a POST metódussal küldött adatokat tartalmazza Asszociatív tömb Kulcs-érték párok tárolására alkalmas adatstruktúra. A tömb indexe numerikus (egész szám) érték mellett lehet szöveges érték is, ekkor kulcsnak hívjuk. A HTML űrlapok szervernek elküldésekor a megadott HTTP metódusnak megfelelő asszociatív tömb kerül feltöltésre úgy, hogy - a kulcsok a beviteli mezők nevei - az értékek a beviteli mezők értéke (value) FONTOS! Az adatok típusának ellenőrzését szerver- és kliens oldalon is, de legalább szerver oldalon el kell végezni! Ha egy mezőbe telefonszámot, emailt, számsort várunk, ellenőrizni kell, hogy valóban a megfelelő típusú érték került elküldésre. Emellett fontos, hogy a bejövő adatokat előkészítsük az adatbázisba írásra, azaz a megfelelő formátumban, megfelelő hosszúsággal stb. rendelkezzen.
  4. Sebestyén József 2014 5 Felhasználói adatkezelés A felhasználó regisztrációjával ránk

    bíz bizonyos információkat, amelyek biztonságos tárolására különös figyelmet kell fordítanunk. Fontos, hogy csak annyi információt kérjünk a regisztrációhoz, amelyre feltétlen szükségünk van, például email cím, felhasználónév, név, jelszó. A korlátozott információval magunkat is védjük az adatokkal való visszaélés vádjával szemben, illetve ha hozzáfér valaki a tárolt adatokhoz, ő sem tudja ártó szándékkal felhasználni azokat. Adatbázis tervezése Az adatbázis megtervezésekor meg kell becsülni a tárolandó adatok maximális hosszát és ennek megfelelő méretű adatmezőket kell beállítani. Nagy méretű adattáblák esetén jelentős tárhelyet lehet nyerni a jó tervezéssel.
  5. Sebestyén József 2014 6 Regisztráció A felhasználó regisztrációjánál a következő

    ellenőrzéseket kell végrehajtani: • A felhasználó a megfelelő típusú és valós adatokat adott-e meg (email, telefonszám, felhasználónév) • Létezik-e már a adott azonosítójú felhasználó (azonosításra használt adattól függően email, felhasználói név ellenőrzése) • Regisztrációnál megfelelően adta-e meg a felhasználó a jelszavát? Ellenőrzésre használható, ha kétszer kérjük be a felhasználótól a kívánt jelszót. Ha mindkét alkalommal helyesen adta meg, akkor azt használjuk jelszónak.
  6. Sebestyén József 2014 7 Jelszó kezelése A jelszavakat titkosított formában

    tároljuk az adatbázisban. Erre az úgy nevezett hasító függvényeket használjuk (hashing algorithm) Hasító függvény Tetszőleges hosszúságú és típusú adatból fix hosszúságú karaktersort állít elő. Azonos bemenetre azonos kimenetet állít elő. Az előállított karaktersorból az eredeti adatsor nem állítható vissza, a titkosítás egyirányú. Regisztráció A felhasználó megadja a jelszót, amelyet titkosítunk, majd eltároljuk az adatbázisba. Autentikáció / azonosítás A felhasználó megadja a jelszavát, előállítjuk belőle a titkosított kódot, majd összehasonlítjuk az adatbázisban tárolt titkosított értékkel.
  7. Sebestyén József 2014 8 Jelszó kezelése – probléma 1 Probléma

    Amennyiben két felhasználó azonos jelszót használ, az adatbázisban azonos hash kerül eltárolásra. A gyakran használt jelszavak hash-e ismert. A előre legenerált jelszavakat tartalmazó táblákkal a hash-hez tartozó jelszó hamar kideríthető. Megoldás A jelszó titkosítása előtt a felhasználó által megadott jelszót a felhasználóra szabottan egyedi módszerrel módosítjuk, például: - belekeverjük a felhasználónevet a jelszóba - generálunk a felhasználóhoz egy egyedi kulcsot, amit a jelszó módosításához használunk A jelszó titkosítás előtti egyedi módosítását sózásnak/salting-nak hívjuk.
  8. Sebestyén József 2014 9 Jelszó kezelése – probléma 2 Probléma

    Az eltárolt jelszavak adott kódolással vannak eltárolva. A számítási kapacitás növekedésével a hasító algoritmusok számítása gyorsabbá válik. Frissíteni kell a felhasználó jelszavait, amivel több probléma is van: - Mivel nem tudjuk, hogy mi az eredeti jelszó, frissíteni csak felhasználói bejelentkezéskor tudunk. - Tudnunk kell, hogy az adott felhasználónál frissítettük-e már a jelszót. Megoldás Egyedi megoldás esetén az adatbázisban vagy az előállított titkos kulcsban kell eltárolnunk a titkosításra használt algoritmus azonosítóját. A PHP 5.5 felett már beépítve tartalmaz jelszó kezeléssel kapcsolatos metódusokat, amelyek speciális formátumú hash-t használnak a kódolási paraméterek tárolására: - password_hash: a megadott szövegből az aktuálisan ajánlott titkosítással előállítja a hash-t - password_verify: a password_hash által előállított hash-sel hasonlítja össze a megadott jelszót - password_needs_rehash: megmondja az adott hash-ról, hogy régi titkosítási algoritmussal lett-e előállítva
  9. Sebestyén József 2014 10 Jelszó kezelése – beépített megoldás Példa

    a PHP által beépített jelszó kezelőre for($i = 0; $i < 5; $i++){ echo password_hash("kutya", PASSWORD_DEFAULT)."\n"; } Kimenet $2y$10$86/z10WhwDB3xY6gpxpsj.IZ4/YzhJmQKfKts1aab9aS9n2hf/m3e $2y$10$MImt.cqwvcdLwYWZ/o/KMOoIMlRhcSbamDRRyd.fICxu8V4qzuQA. $2y$10$Iln0eIRMgmKPXaoaXJ7j2eMlLzCSKk6P8vZbjU8zyysQfaWKgXu3m $2y$10$UVlaP1wBQ1SSh8q3nQc3fusyZUaFMG5HRRbe16KCN8VRawAQEudwG $2y$10$/h87Y6rQVvJPHhZSi4cbke0s4UXXzXYxtWI.A2I3iCWKvWe5G.//6 Látható, hogy azonos jelszóra más és más kimenetet generál. A kimenet felépítése a következő: - titkosítási algoritmus azonosítója - titkosítási algoritmus egyéb paramétere - sózáshoz használt egyedi kulcs (salt) - a sózott jelszóból adott algoritmussal előállított hash