Autor Zpráva
Josef Burger
Profil *
Ahoj - mám aplikaci vytvořenou v html/js/php/ajax mám ji zabezpečenou aby se uživatel nemohl přihlásit na více počítačích/prohlížečích najednou. To je vytvořeno pomocí kontroly přihlášení. Zajímá mně jak aplikaci zabezpečit aby uživatel neotevřel aplikaci ve dvou a více záložkách, mohlo by totiž dojít k přepisování dat.

Předem děkuji za případné podněty a doporučení...
Darker
Profil
Josef Burger:
Zajímá mně jak aplikaci zabezpečit aby uživatel neotevřel aplikaci ve dvou a více záložkách, mohlo by totiž dojít k přepisování dat.
Udělej ji tak, aby k onomu přepisování dojít nemohlo. Zakázat otevření aplikace ve výše záložkách nelze - je to zabezpečení na straně klienta, který si ale s daty co mu posíláš, včetně zabezpečení samotného, může dělat co chce (resp. umí).
U všech metod, které mě napadají je riziko, že se uživatel zasekne ve stavu, kdy mu skript nakonec nedovolí ani jednu záložku.

Pokud se ale neštítíš žádné špatnosti, múžeš si pro daného uživatele (předpokládám, že rozpoznávání uživatelů máš bezpečně vyřešené) uložíš, žes mu stránku už poslal, a při dalším požadavku ji nevygenerovat.
O tom, že stránku uživatel pořád má, tě bude ujišťovat ajaxem z jeho strany. Řešení se vlastně podobá zobrazování online uživatelů na stránkách.

Dalším řešením by bylo na straně uživatele vygenerovat komunikační klíč, ten zaregistrovat na straně serveru, který pak bude požadavky s jiným klíčem ignorovat.

Dále bys mohl zkusit něco s cookies, momentálně mě ale nenapadá nic, za co bych se nestyděl.

Nicméně všechny návrhy výše jsou špatné. Správně bys měl mít aplikaci navrženou tak, aby žádné přepisování nehrozilo. Bohužel s tím ti nikdo neporadí, dokud ji neuvidí (a možná ani pak ne...).
juriad
Profil
souhlasím s Darkerem;
jedna z používaných metod je, že ke každému údaji si budeš uchovávat verzi (číslo, které se inkrementuje při změně)
verzi pošleš spolu s formulářem a při přijetí requestu na serveru zjistíš, zda data v databázi mají stejnou verzi, jakou formulář
pokud ano, provedeš změnu (formulář mění aktuální data); jinak uživateli vynadáš (změnil ti data, zvýšila se verze a formulář již není aktuální)
kolize se řeší "až nastane" (fungují všechny formuláre, ale jen jeden (první odeslaný) z nich bude vyhodnocen)

jinou možností je vygenerovat každému formuláři třeba náhodný klíč a ten uložit do databáze k datům, která se formulářem budou měnit a ignorovat všechny requesty, které nemají ten správný klíč
kolize se řeší "předtím než nastane" (klíče se v databázi přepisují, takže funguje jen jeden formulář, ten poslední otevřený)
peta
Profil
Odkazy » Target
Pokud si to uzivatel otevre sam v zalozce, je to jeho riziko. Takovy uzivatel si ale vetsinou da na to pozor.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0