#8 peter
Panečku, ty jsi se rozepsal, díky za vysvětlení hned si to jdu přečíst.
Mas divne dotazy. Zkusim ti objasnit, jak to funguje, jak se to obvykle dela, bez vetsiho zabezpeceni.
- Ty si pohlidas v php kodu, treba pomoci session, zda je uzivatel prihlasen, overis si jeho loginy ze session, pripadne nejake session id. (To je jeden include radek na externi php soubor, ktery ho pri spatnem loginu presmeruje na logovaci stranku, treba. Takze nic sloziteho, pokud ten kod uz pouzivas jinde.)
Ano, tak to mám
- Pak mu dovolis normalne spustit smazani. Je jedno, zda pres get, ale lepe pres post.
Ano, tak to mám
- Neni problem, paranoidne zkontrolovat prava pred kazdym sql dotazem, resp. tvoji funkci. A tez se dela odpojeni po ukonceni sql dotazu, ihned. Preberes data pres fetch a odpojis. Po te data treba zobrazujes nebo zpracovavas dal.
Ano, tak to mám, vlastně nemám, ukončuji dotaz nějak takhle $conn->close(); a na konci souboru, přestože, těch dotazů je v souboru více. Ale hádám, že to není důležité.
Samozrejme, ted jde spustit treba 10x smazat. To se da vyresit presmerovanim na jinou stranku pomoci header.
Ano, tak to mám, přesměrovává pomocí header z pohledu uživatela na stejnou stránku a v levo dole vyskočí notivifka ce úspěšném smazání nebo neúspěšném v případě, že by byl smazán cizí záznam (ano, už jsem to pošéfoval i na straně serveru, takže hotovo).
Cili, ten mazaci kod budes mit treba smaz.php, form action=smaz.php. A smaz.php ho pres header vrati na puvodni stranku, treba index.php. Tu stranku si muzes taky odeslat formularem, odkazem.
K presmerovani pripojis do adresy treba parametr, ktery uzivateli vypise chybu nebo, ze akce probehla v poradku.
Mám to podobně, akorát ne přes form, ale onclick a get požadavkem k PHP souboru který zkontroluje, odkoho ten GET je (podle login session) a jestli ten záznam je jeho.
Pokud se jedna o hackera a spusti ti tam neco 10x, tak s tim mnoho nenadelas. Ale 10x nesmaze radek z db, protoze radky maji sve autoincrement id, obvykle, a takove tam existuje jen 1x. Jenom ti hacker trochu zatizi server.
Jde zmáčknout jen jednou, protože je to javascriptem, nikoliv formulářem jak radíš. Takže zmáčknout muže jen jednou v tom případě se záznam smaže, tabulka se přepíš a podruhé už nebude mít na co zmáčknout a i kdyby měl, napíše mu to, že přístup je odepřen, protože ten záznam ani neexistuje. Ano id mám unikátní.
Samozrejme se da vyuzit toho, ze se uzivatel neodhlasil, odesel od pc a spustit tam nejake dalsi kody. Ale s tim ty mnoho neudelas, session je platne, nemuzes vedet, ze tam uz nesedi puvodni uzivatel.
Na to prdím, nedělám internetové bankovnictví pro rajfku.
Mno, co se tyce sql. K sql se pripojujes z php kodu na sveho univerzalniho uzivatele, treba fix_www / heslo. Ten je univerzalni pro kazdeho uzivatele webu. Ty tedy hlidanim prav v php musis zabezpecit, aby se tedy nespustil zadny sql dotaz, pokud uzivatele radne neoveris.
Hotovo. Viz výše. Přidělal jsem tam kontrolu oprávnění, problém je vyřešen.
Tady je moznost, pokud to hosting umozni, udelat si nad databazi vic uzivatelu. A pak se muzes k sql pripojovat ruznymi uzivateli s ruznymi sql pravy. Ale to se obvykle neda, obvykle mas 1 usera (free db hostingy). Ale ta moznost je, na localhostu nebo lepsim hostingu.
Muzes pak nastavit prava treba fix_quest, ktery si smi prohlizet treba jen nektere tabulky a at posila jake chce prikaxy pres php, tak sql ho nepusti k tem ostatnim. Takze, pokud to jde a vis, co delas, rozhodne doporucuji.
Zbytečně složité a na vlastní server je škoda to dávat, bude to mít malou návštěvnost, ale chápu, že definovat si to takhle přímo v databázi je to nejlepší co může být.
Jenze, stale to zavisi na tom, jak dobre poresis prava pres php, aby te quest nzziskal nekde admin prava. Dobre reseni je obvykle pracne. Tys zadal jednoduche, bohuzel.
Řekl bych, že si myslím, že je to teď dobře, ale jsem začátečník a myslet si to můžu, vždycky to jistě nějak jde. Získání admin práv je u mě jednoduché přečíst si configurační soubor, čímž získá přístup do DB, a tam si jen vytvořit uživatele co bude mít ve sloupčku "admin" = 1 :-D
Díky za informace a zkušenosti, můžeme to považovat za uzavřené.