Autor Zpráva
Marek Šneberger
Profil *
Ahoj,

Mám aplikaci, která komunikuje přes GET s klienty. Adresa je example.com/tajnystring + GET parametry.
V databazi porovnám tajnystring, a pokud je nalezen, vím o kterého uživatele se jedná. Pokud ale někdo (ať už záměrně nebo z neznalosti) někomu dá onen "tajnystring", dotyčný se bude ukazovat jako první uživatel.
Jak tomu zabránit?
Napadlo mě, že bych mohl vytvořit tabulku tajnestringy se sloupcema id, tajnystring, ip, users_id (cizí klíč do users), atd... A onen "tajnystring" bych generoval z řádků z databáze. Něco na způsob $secret = sha1($row). Klient by mi poslal přes GET tento $secret, já bych ho rozbalil, a porovnal bych "tajnystring", ip adresu, a ID uživatele jestli sedí.
Jak to ale provést? Je nějaká funkce na "zabalení a rozbalení?

Snad jsem to napsal trošku srozumitelně, za každou odpověď děkuji,
Marek
nemeja
Profil
Proč je to tajnej string, když ho máš v url adrese ( metoda GET ), používej session nebo cookies
Marek Šneberger
Profil *
nemeja:
V adrese ho mám, ale tu adresu má každej uživatel jinou. Momentálně pro tajnej string používám
<?php
md5(uniqid(rand(),true));
?>
Cookies používat nemůžu, protože klient není prohlížeč ale aplikace, která se serverem komunikuje přes GET. Jak bych to pak mohl porovnávat?
Jde o to, že uživatel přijde na webovku, zkopíruje si adresu s tím tajným stringem, vloží do programu a frčí. Pokud jí ale někomu dá, je problém.
Myslel jsem , že na to existuje nějaká funkce nebo tak :/
Amunak
Profil
Marek Šneberger:
Myslím že tohle moc "rozumně" řešit nejde. Pokud to chápu dobře, jde vlastně o jakýsi API klíč. Musíš tam prostě napsat, ať onu adresu (nebo alespoň ten tajný řetězec) nikomu nedávají, a dát taky možnost vygenerovat nový. Můžeš pak třeba taky logovat IP adresy, a když se objeví nová, uživatele o tom upozornit, a pokud si přeje, vygenerovat mu klíč nový.

V opačném případě bys musel tu aplikaci napsat nějak jinak, aby se třeba uživatel musel vždy nejprve přihlásit a od serveru by po každém přihlášení dostal jiný klíč (který by navíc program přijal automaticky, takže by o něm uživatel ani nevěděl).
Marek Šneberger
Profil *
Amunak:
by po každém přihlášení dostal jiný klíč
To by taky šlo, díky. Nebo mě napadlo udělat to trošku jinak, např.
V tabulce users mám onen tajný klíč, ip adresu a ID uživatele. To bych dal do pole, např.
<?php
$array = array(
'ip' => '127.0.0.1',
'users_id' => 3,
'secretKey' => 'bflmpsvz'
);
?>
Z toho pole bych si udělal otisk sha1:
<?php
$sha1 = sha1($array);
?>
Uživateli bych jako tajný klíč předal $sha1
Udělal bych si novou tabulku 'secrets', kde by bylo ID, secretKey, IP, users_id (cizí klíč do users), sha1
Pak by mi z klienta poslal $sha1 (plus v $_GET ip adresu a pár dalších věcí), $sha1 bych porovnal v tabulce 'secrets', pokud by se našel, porovnal bych IP adresy, pak secretKey a pokud by to prošlo, věděl bych o koho se jedná.
Šlo by to tak?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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