Autor Zpráva
Aleš U
Profil
Ahoj,
mám dotaz na programatory PHP. Mám klasické prihlasovani pres session v php scriptu.
Lze použít nějakou metodu, aby přihlašování bylo platné pouze na vybraném počítači?

IP omezení se mi nechce aplikovat z důvodů měnící se přidělené adresy a podobně.

Jedná se o recepční - většinou brigádnice. Ti dostanou přihlášení a majitel nechce aby se přihlašovali odkudkoliv z důvodu úniku informací o klientech.

Díky za tipy!
Keeehi
Profil
Aleš U:
Do prohlížeče můžeš uložit cookie s velmi dlouhou platností, která ho bude identifikovat. Při přihlašování zkontroluješ, zda u této cookie máš uloženo, že se může přihlašovat. Pokud ano, pak povolíš přihlášení. Pokud ne, tak zobrazíš stránku, v které bude políčko pro zadání jednorázového kódu. Zároveň pošleš tento jednorázový kód na email majitele.
Tomášeek
Profil
Keeehi:
Tím kódem bych to asi nekomplikoval, ne?

Při prvním spuštění aplikace (nebo nějaké konkrétní URL) na daném počítači uložit COOKIE a pak už jen kontrolovat, že COOKIE existuje. Pokud ne, přístup odmítnout. Samozřejmě pokusy o login logovat, to je samozřejmé.
RastyAmateur
Profil
Keeehi:
Taky mě to napadlo. Ale jak zkontroluješ, jestli daná cookie patří právě danému PC? V práci si ji zjistí a doma ji použije...
Kcko
Profil
RastyAmateur:
Pak zbývá asi jen prozkoumání pole $_SERVER (tam bych se zaměřil na věci, které jsou nejvíce unikátní pro daný přístup, zahashoval a porovnal a pak pustil).
Případně v JS bych si vytahl co nejvíce unikátních vlastností pro daný přístup, tj klidně rozlišení, hloubku, systém atd a pak na základě těchto údajů přesměroval na skript, který mě pustí dál.

Nebo bych při každém přihlášení vygeneroval na nějaký e-mail nějaký verifikační kód, který se musí ještě doplnit ke stávájícímu heslu (za předpokladu, že ten e-mail bude přístupný pouze na daném PC v práci).
A když se bojíš COOKIES tak zkus localStorage (to už tak viditelné a známé není).

PS. Zase z brigádnic nedělej hackery a z přístupu do interní aplikace CIA TOP secret materiály.
Keeehi
Profil
Tomášeek:
A když si pak promaže prohlížeč, tak se nikdy nepřihlásí.

RastyAmateur:
Taky mě to napadlo. Ale jak zkontroluješ, jestli daná cookie patří právě danému PC? V práci si ji zjistí a doma ji použije.
Ano, to by mohla. Ale stejně jako Kcko si nemyslím, že by věděla, že má udělat zrovna toto. Dalo by se případně tu cookie nahradit tou IP adresou. Zase by se ověřovala emailem (nebo jiným kanálem).
Nebo možná úplně nejhezčí by bylo OTP pro každé přihlášení, přičemž generátor by byl fyzicky v práci. Za pár stovek bych koupil nějaký bazarový android telefon, nainstaloval Google Authenticator a je to.
Tomášeek
Profil
Keeehi:
A když si pak promaže prohlížeč, tak se nikdy nepřihlásí.
Bavíme se o recepci v hotelu. Promazávání prohlížeče je minimálně podezřelé (stejně jako kompletně smazaná historie, atp.).

Ale to se dostáváme tematicky už mimo, mám na tento typ práce jistý názor a vím, jak tyhle lidi (ne)pracují. Možnosti zde byly uvedené, včetně výhod a nevýhod. Snad si tazatel vybere, co mu sedí nejvíce.
TomášK
Profil
Aleš U
Povol přístup na server jen s klientským certifikátem a nainstaluj ho do prohlížeče na recepci. Myslím, že i může být zaheslovaný a v prohlížeči uložené heslo tak, aby se nemuselo vyplňovat.
Keeehi
Profil
Tomášeek:
Bavíme se o recepci v hotelu. Promazávání prohlížeče je minimálně podezřelé (stejně jako kompletně smazaná historie, atp.).
Cookies není žádné bezpečné uložiště. Párkrát se mi stalo, že mi prohlížeč zamrzl, spadnul a při příštím spuštění jsem se musel zase všude přihlašovat.
Tomášeek
Profil
Keeehi:
Cookies není žádné bezpečné uložiště. Párkrát se mi stalo, že mi prohlížeč zamrzl, spadnul a při příštím spuštění jsem se musel zase všude přihlašovat.
Máš pravdu. Sice se mi to dlouho nestalo, ale nastat může.
Aleš U
Profil
Přátelé díky, nečekal jsem tolik ohlasů. Problém je ten že ani majitel s PC tolik neumí abych mu vysvětloval jak funguje nějaké OTP a podobně. To řešení s cookies mě napadlo a vypada to jako nejjednodussi reseni.
Holt kdyz pc zamrzne tak prijde admin a nastavi cookies znovu. Jeste jednou diky!
Keeehi
Profil
Co je na OTP prosím tebe složitého? Vyplní jméno a heslo, pak na tom telefonu na kterém bude jediná aplikace si přečtou šest čísel a opíšou je do políčka. Na toto nejsou potřeba žádné extra znalosti a nikdy žádný admin přijít nemusí.
Aleš U
Profil
Slozite to asi neni... ale vysvetluj to zakaznikovi ktery aplikaci pouziva a je 300 km daleko. A je to prumerny uzivatel = pusti si PC, prohlizec tot vse.
smitka
Profil
Šel bych do řešení, které psal TomášK [#8] - je to standardní způsob, jak přesně tento problém řešit. Vyžaduje jen zavést certifikační autoritu (což je velmi jednoduché třeba s sourceforge.net/projects/xca), vygenerovat klientský certifikát a drobně nastavit webový server.
Amunak
Profil
Aleš U:
Jedná se o recepční - většinou brigádnice. Ti dostanou přihlášení a majitel nechce aby se přihlašovali odkudkoliv z důvodu úniku informací o klientech.

Proč se tam vůbec dá přihlásit zvenku? Co takhle omezit přihlašování jen na lokální IP adresy (případně pokud je server venku a není to spojené VPN tak na adresu pod kterou se ta recepce objeví).

TomášK:
Povol přístup na server jen s klientským certifikátem a nainstaluj ho do prohlížeče na recepci. Myslím, že i může být zaheslovaný a v prohlížeči uložené heslo tak, aby se nemuselo vyplňovat.
Pokud je certifikát uložený bezpečně (tzn. je šifrovaný) pak se pro použití musí dešifrovat s heslem. Pokud není, pak jde prostě zkopírovat. Tohle není řešení.


Celkově mi přijde že problém řešíte na špatné úrovni. Pokud to ale musí být takto v PHP na úrovni aplikace, standardní postup je ukládat každé "dlouhodobé přihlášení" do nějaké databáze vázané na IP adresu. Jiná adresa = jiné přihlášení. Adresy (ani proměnlivé) by se neměly měnit tak často aby to byl problém. Jakým způsobem se pak toto dlouhodobé přihlášení ověří už je jedno, ale nejjednodušší by prostě bylo požadovat "schválení" manažerem. Když to klient chce mít bezpečné tak ať vidí každé přihlášení a explicitně povolí jen to co se mu líbí. Pochopitelně takový systém musí umět více přihlášení i pod jednou IP (a na stejném účtu) - třeba kvůli více prohlížečům a tak, tak akorát na to pozor. Ideální je spolu s tím dlouhodobým loginem ukládat alespoň také poslední viděný user agent, hodí se to k případné identifikaci.

Tento systém se navíc ani nevylučuje s klasickými "krátkodobými" loginy pokud jsou vyžadované. Šlo by klidně i autorizovat jeden PC (nebo spíš prohlížeč) pro větší množství loginů, to by v tomto případě bylo asi vhodnější. Možností je nespočet.
Smekac
Profil
Já to celé vyřešil přes LocalStorage, každý uživatel má unikátní "certifikát" který při prvním loginu si nahraje do prohlížeče, je to v podstatě jen ID a pak dlouhý řetězec náhodných znaků který pravidelně script porovnává s daným řádkem v mysql databázi. Tím se dá snadno i ihned zamezit přístup uživateli na daný portál a podobně jelikož jako admin mohu certifikáty spravovat. Jak script zjistí že "certifikát" neplatí tak to uživatele hned odhlásí. :-)

To řeší problém různých IP, protože to rozlišuje podle zařízení na kterém se uživatel přihlásí a certifikát má nebo ne.

Jak bylo psáno výše, nepředpokládám že běžný uživatel bude hacker :D :D

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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