6. labor, PHP/MySQL II.
- Indítsd el a Ampps-t.
- Indítsd el a MySQL Workbench-et, csatlakozz a lokális MySQL
szerverhez
- A labor5-9i.html és searchi.php fileok a múltkori 9. feladat egy megoldását tartalmazza,
amibe viszont több biztonsági rés is került.
A múltkori mintában ezek persze nem voltak benne. Ezeket
fogjuk most kipróbálni, ehhez töltsd le ezeket a file-okat (a
php kiterjesztést txt-ről php-re kell változtatni, ez
minden további letöltendő php-re vonatkozik) és másold be
a szokásos www mappába, próbál ki, hogy működik-e a keresés: localhost/labor5-9i.html
(A keresési eredményen kívül - segítségképp - kiírja a
végrehajtott SQL utasítást is.)
- A keresési mezőbe most másold be a következőt:
Kov%'; SELECT 'aaa' as memberid, 'bbb' as name, 'ccc' as
levelofmember -- xxx%
Mi történik? Miért?
- Írj olyan keresési mintát, ami lekérdezi a hr
séma empolyees táblájának valamely 3 oszlopát. (Hogy
mik vannak ott, azt a MySQL Workbench-ben meg tudod nézni).
- Írj olyan keresési mintát, ami beszúr a videos séma members
táblájába egy új tagot, tetszőleges adatokkal. (Hogy a
beszúrás tényleg megtörtént, azt szintén a Workbench-ben
meg tudod nézni).
Ezt hívják SQL
injection támadásnak. Érdemes tudni erről, a
Google segítségével sok hasznosat meg lehet róla tudni, milyen
további trükkös dolgokat lehet csinálni ill. hogyan kell
ellene védekezni.
A legfontosabb eszközök: $username megfelelő
beállításai, real_escape_string(),
multi_query()
helyett query()
és a prepared
statement.
- Az OpenStreetMap
egy nyilvános szolgáltatás, amivel meg lehet keresni egy cím GPS
koordinátáit. Pl:
http://nominatim.openstreetmap.org/search?q=1111%20egry%20j%C3%B3zsef%20utca%201&format=json&polygon=1&addressdetails=1
(a q=... részbe kell a keresendő címet írni, ezt a rawurlcode()
fügvénnyel kell megfelelő formára alakítani.) Az ilyen
szolgáltatások outputja kétféle szokott lenni: XML vagy JSON. Használjuk
most a JSON-t.
Készíts egy HTML oldalt, ami egy táblázatban listázza a tagok
nevét, címét és a cím GPS koordinátáit (azaz a lat és lon
értékeit).
Itt egy példa, hogyan lehet kinyerni az adatokat: gpssearch.php
Szorgalmi: legyen a helyre egy GoogleMaps link is, pl.: https://www.google.com/maps/search/?api=1&query=47.4784103,19.0596001
- Az OMDb API
segítségével listázd ki a filmeket és hozzájuk tartozó
értékeket: Genre, Actors, imdbRating. (Szorgalmi: beágyazva
a plakát képe és link az IMDb oldalra.) A lekérdezéshez kell regisztrálni és
kérni egy APIkey-t. Ez csomó hasonló ilyen szolgáltatásnál
hasonlóan működik. De most lehet használni az enyémet is, pl.
így:
http://www.omdbapi.com/?t=Dogma&i=tt3896198&apikey=ab88bfa4
- A MySQL Workbenchben a videos séma members
tábláját bővítsd ki egy username (VARCHAR(50)) és
egy password (VARCHAR(255)) attribútummal.
Készíts egy HTML oldalt, ahol be lehet írni egy új tag adatait
és egy Register gomb megnyomásával hozzáadja az
adatbázishoz az új tagot. Fontos, hogy a jelszót nem szabad
eredeti formájában tárolni (pl. BKK
rendszer), hanem a password_hash()
függvénnyel titkosítani kell. (Később majd a password_verify()
segítségével lehet ellenőrizni, hogy megfelelő-e a jelszó.)
Az alap változatban elég a memberid, név, username,
password.
Szorgalmi nehezítések:
A többi mező is legyen kitöltve.
A deteofbirth és a levelofmember értékét
legördülő menüből választjuk ki.
A memberid-t ne kelljen beírni, az automatikusan a
legkisebb szabad 10000-nél nagyobb szám legyen.
Ellenőrizze, hogy a username még nem szerepel a
táblában, ha igen, írja ezt ki.
- Készíts egy HTML oldalt, ahol be lehet írni egy új
kölcsönzést. Az első változatban a megfelelő id-k és a dátum
begépelésével.
Szorgalmi nehezítések:
A dateofcreation az aktuális dátum legyen.
A videókat és a tagokat is legördülő menüből lehessen
kiválasztani.
A menüben csak az éppen nem kikölcsönzött videók szerepeljenek.
A memberid helyett a taghoz tartozó username és
password értékeket kérje és csak akkor engedélyezze a
kölcsönzést, ha a jelszó helyes.