Předmět Autor Datum
Všetko je třeba ošetřovat. //edit A na co to vlastně potřebuješ. Na tohle se daleko častěji hodí me…
Flash_Gordon 09.10.2007 10:34
Flash_Gordon
Pretože pri SESSION si môžem doovliť zabudnúť unset(). Ale m;6no prejdem na session. Len akurát mám…
msx. 09.10.2007 10:41
msx.
Programovat sice neumím, ale ať se nad tím zamýšlím jakkoliv tak práce se Sessions mi přijde vždycky…
Flash_Gordon 09.10.2007 10:46
Flash_Gordon
Kľudne si môžeš pamätať id editovaného prvku v input type=hidden (alebo v url), len pri zobrazovaní…
los 09.10.2007 10:47
los
Akože? Tomu celkom nerozumiem. Chápem, že ak má právo meniť, tak ho nesmiem použiť, lenže, ak bude v…
msx. 09.10.2007 10:52
msx.
Napr. tak, ako je to spravené tu pri editovaní príspevku: Identifikátor príspevku je v URL, pričom s…
los 09.10.2007 10:59
los
Dobre, takže začínam rozumieť. Ja mám všetko vo formulári, takže v url nevidieť nič. Lenže pri zobra…
msx. 09.10.2007 11:09
msx.
Potrebuješ si pamätať nejaké údaje z predchádzajúcich krokov? Ak áno (a nie je to len nejaká jedna h…
los 09.10.2007 11:25
los
Keď bude v meno1 hodnota 1, tak sa zobrazí formulár na editáciu, keď 2, tak sa obsah formulára zapíš…
msx. 09.10.2007 11:29
msx.
Takže ti vlastne nevadí, ak si niekto sám zmení hodnotu v meno1. V čom je potom problém?
los 09.10.2007 11:32
los
Aha, takže začínam chápať. Hodnoty, ktoré sú skrytými prvkami vo formulári a mohol by ich používateľ…
msx. 09.10.2007 11:46
msx.
Tá hodnota meno1 nemusí byť v session a vlastne nemusí byť vôbec na stránke. Na webovú aplikáciu sa… poslední
los 09.10.2007 13:17
los
Hmmm. Tak to je otázka. Ber to spíše tak, že základní autorizace vlastně definuje jaká práva ten uži…
Flash_Gordon 09.10.2007 11:00
Flash_Gordon
Nie. Povedzme, že ideš editovať. Nastavíš session, že edituješ, aby si mohol overovať. A môže sa sta…
msx. 09.10.2007 11:20
msx.
To jsem opravdu nepochopil. Přece já předpokládám, že ten uživatel bude muset kliknout na submit, kt…
Flash_Gordon 09.10.2007 11:26
Flash_Gordon
Lenže tak isto si môžeš zavolať ten súbor aj ručne s nastavenými hodnotami podľa tvojho výberu. (Nie…
msx. 09.10.2007 11:50
msx.
Už jsem psal a los to taky psal. Ty na začátek toho skriptu umístíš autentizaci (třeba napojenou na…
Flash_Gordon 09.10.2007 11:59
Flash_Gordon
Klient môže ich hodnoty jednoducho zmeniť, takže ich treba kontrolovať.
los 09.10.2007 10:37
los
Dobre, ale potom znamená, že asi ozaj musím prejsť na session. Lenže potom ako poriešim to, čo som p…
msx. 09.10.2007 10:49
msx.

Pretože pri SESSION si môžem doovliť zabudnúť unset(). Ale m;6no prejdem na session. Len akurát mám obavy z toho, aby som nenechal niečo nastavené, prípadne niekto nebude klikať v rámci postupu a klikne inde a session ostane nastavené. V rámci postupu myslím napríklad, že :

1. zobrazí sa zoznam
2. vyberie prvok na editáciu
3. potvrdí editované hodnoty

No a ak pri kroku dva klikne úplne inde a nechá to tak, tak sa formulárový prvok vymaže, ale session nie.

Napr. tak, ako je to spravené tu pri editovaní príspevku: Identifikátor príspevku je v URL, pričom sa kontroluje, či daný používateľ môže editovať zadaný príspevok.

Teda, ako zistím, že ho môže/nemôže zmeniť?

To záleží na logike tvojej aplikácie.

Dobre, takže začínam rozumieť. Ja mám všetko vo formulári, takže v url nevidieť nič. Lenže pri zobrazení zoznamu si nastavím skrytý prvok vo formulári s menom meno1 na 1. Potom po výbere položky v zozname sa kontroluje hodnota meno1. Ak je tam 1, tak sa zobrazí formulár na editáciu. Po potvrdení sa v meno1 nastaví nová hodnota alebo v inom skrytom prvku sa nastaví ďalšia hodnota a teda rozhranie vie, že sa postúpilo o krok. Lenže, ak tam niekto zmení id, tak sa to celé zrúti. Ak to bude v url a povedzme, že dám editáciu, tak aby som mohol overiť, či používateľ má právo editovať, musím mať niečo v zálohe podľa čoho to overím. To môže byť session, pretože session nemôže zmeniť, lenže problém vznikne tak, že ak to raz nastavím v session a používateľ sa rozhodne nepotvrdiť editáciu a klikne inde, tak v session ostane nastavená hodnota. Ja to teda dávam do skrytého prvku, ktorý sa vymaže, lenže ten môže užívateľ zmeniť a tým si urobiť, čo sa mu zachce a to je to, o čo mi ide. Neviem, či ja správne chápem teba, ako to chceš overiť, či má právo editovať.

Potrebuješ si pamätať nejaké údaje z predchádzajúcich krokov? Ak áno (a nie je to len nejaká jedna hodnota), tak potom si to ulož do session.

Prečo nastavuješ pri zobrazení zoznamu meno1=1 - čo táto hodnota znamená?
Kvôli čomu program spadne, ak je v meno1 neočakávaná hodnota?

Aha, takže začínam chápať. Hodnoty, ktoré sú skrytými prvkami vo formulári a mohol by ich používateľ zmeniť a je nutné udržať ich v poriadku, treba dať do session. Session si vlastne nastavím až vtedy, keď sa dostanem do editovania, čiže meno1 == 1. Potom pri meno1 == 2 len vytiahnem hodnoty zo session a teda budú chránené.

Lenže teraz otázka:

Zobrazí sa zoznam, čiže meno1 sa akurát nastaví na 1, lenže id ešte nie je uložené v session, pretože ešte si používateľ tlačítkom nevybral položku a teraz nastaví on sám meno1 na 2 a do id dá nejakú hodnotu?

Aha, práve ma napadla odpoveď: Session nie je nastavené a teda pri kontrole meno1 == 2 stačí zamietnuť editáciu, pretože id má byť už v session a tam nie je nič.

NO a teraz ma napadlo, že to by som si mohol hackovať tak vlastný zoznam, pretože to, čo sa nebude dať editovať v id nikdy vlastne nebude, pretože sa v zozname položka s takým id nezobrazí na editáciu (tým myslím zmenu registračných údajov pre prihlasovanie na stránke a podobne). Takže asi preto sme si nerozumeli.

Znamená to, že to čo popisujem je bežpečné, pokiaľ si to používateľ nebude chcieť zabúrať sám? (Prihlasovacie údaje o registrovaných má možnosť editovať len administrátor.)

Tá hodnota meno1 nemusí byť v session a vlastne nemusí byť vôbec na stránke.

Na webovú aplikáciu sa nemôžeš pozerať ako na windows aplikáciu (v Microsofte to tak skúsili a vyšiel z toho ASP.NET). Je to vždy len požiadavka - odpoveď. Vstup od používateľa je v GET (url), POST (vyplnený formulár) alebo COOKIE. Všetky tieto vstupy musíš vždy kontrolovať. Tvoja pamäť je v SESSION - tam si pamätáš informácie ku danému používateľovi.

1. Používateľ chce niečo editovať, tak si vyžiada formulár (=požiadavka GET na /formular.php) - ty mu ten formulár dáš (=HTML s formulárom).
2. Používateľ odošle vyplnený formulár (požiadavka POST napr. tiež na /formular.php) - tak tie hodnoty uložíš a povieš mu, že je to uložené (=redirect na HTML s textom) prípadne mu podáš nový prázdny formulár (=redirect na /formular.php).

Tebe je v podstate jedno, či používateľ odošle vyplnený formulár bez toho, aby si ho predtým vyžiadal. Takéto veci ošetrovať nemusíš. Musíš iba skontrolovať, či je ten formulár vyplnený správne.

Hmmm. Tak to je otázka.
Ber to spíše tak, že základní autorizace vlastně definuje jaká práva ten uživatel má.
A ty teď vlastně spekuluješ (jestli jsem to pochopil správně) jak zabránit vlastníku bytu v tom, aby si ten svůj otevřený byt vykradl. Odpověď je jednoduchá.
Prostě spoléhej na to, že se vlastník nebude chtít vloupat do vlastní sekce ke které má přece oprávnění ne :-) ?

Navíc jak jsem říkal mechanismus Sesions toto řeší daleko lépe (dle mého skromného) názoru.
Ihned po zápisu údajů do databáze totiž můžeš danou Sesion okamžitě zrušit. Proto se už nemusíš starat o takové věci jako je klepnutí na zpět.
Nebo ne ? :-/

Nie. Povedzme, že ideš editovať. Nastavíš session, že edituješ, aby si mohol overovať. A môže sa stať jedna z týchto dvoch udalostí:

1. Používateľ edituje a potvrdí editáciu. Vymažeš session a všetko je ako má.

2. Používateľ si to rozmyslí a klikne na odkaz na stránke. Session ostane nastavené, pretože mazať haldu session v každom súbore nemôžeš. Ostane ti teda nastavené a potom, keď sa pohráš s nastavením prvkov formulára, tak sa môžeš opäť to doho nabúrať, pretože sa bude kontrolovať podľa session, ktorá nebola vymazaná.

Teraz prečo nemôžeš vymazať haldu session v každom súbore:

Povedzme, že v každom súbore budeš includovať súbor na mazanie session. Takže session nastavené nebude a ty môžeš byť pokojný. Dobre, lenže teraz sa pustíš editovať a session je nastavené. Keďže máš ten súbor na mazanie, tak to vymažeš a máš pokoj. Lenže ty sa pustíš editovať a potvrdíš editáciu. Bác, v tej chvíli sa ti zas vymaže vďaka tomu súboru session a ty nemôžeš porovnať, či bolo nastavené session, lebo je už vymazané. Tak povedzme, že v tom súbore session mazať nebudeš. Tak ak ho nevymažeš, tak zadaním adresy url sa do toho súboru dostaneš a môžeš si nastavovať čo chceš a efekt mazania v ostatných súboroch je zbytočný.

To jsem opravdu nepochopil. Přece já předpokládám, že ten uživatel bude muset kliknout na
submit, který odešle data pro zápis do databáze.
Když si to ovšem rozmyslí tak tam zkrátka žádná data pro zápis neodešle.

Teda takto. Ty přece data určená pro editaci nebudeš zapisovat do Session. To je nesmysl.

Promysli si to znova a pořádně. Zatím mám pocit, že se škrabeš levou nohou na pravém uchu.

//Edit

Právě v tom je výhoda mechanismu session. Přesně na toto je totiž určen.
Nemícháš data z textového inputu pro uživatele s daty pro editaci.
Takhle v tom máš pěkný guláš kdy některá data jsou určena pro databázi a některá pro orientaci v systému atd...

Prostě si to udělej takto:

Ve formuláři jak je target mu napiš dejme tomu samostatný soubor do skriptu: zapisDoDB.php
a pokud uživatel klikne na zápis tak se data připíšou, přepíšou nebo cokoliv dalšího.
Nakonec souboru šoupneš dejme tomu header("default.php") a nemusiš se o to starat.

Tvůj problém asi pramení z toho, že chceš dělat strašně moc operací centrálně v rámci jednoho skriptu a
teď ses do té složitosti zamotal nebo "chytil do pasti".

Už jsem psal a los to taky psal.
Ty na začátek toho skriptu umístíš autentizaci (třeba napojenou na databázi).
Tím zabráníš tomu, aby kdokoliv, kdekoliv na Zemi s přístupem na internet mohl použít tento formulář bez patřičného přihlášení s patřičným oprávněním.

Pokud budou tyto podmínky pozitivní no tak přejdeš k samotnému zapisu do DB.
Triviální a relativně bezpečné. Ne ?

Zpět do poradny Odpovědět na původní otázku Nahoru