5. labor extra: 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
Esetleg: 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
hasht
kell számolni.
(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.