01.12.2022 22:48
1
Ahoj, mám takový speciální problémek, třeba někdo bude mít dobrý nápad.
Příklad: Mám stránku mojeaddr.cz/xyz.html. Tato stránka ve skutečnosti neexistuje, ale pomocí htacessu nebo PHPka (to je jedno, možno obojí) vrací redirekt 302 na stránku mojeaddr2.cz/xyz.html. Ta existuje a zobrazí se. Nicméně nechci, aby uživatel mohl jít PŘÍMO na mojeaddr2.cz/xyz.html, tj. zadat tuto adresu do prohlížeče (nebo použít bookmark). Pokud to udělá, chci aby ho to přesměrovalo na nějakou jinou error stránku.
Tj. potřeboval bych, aby ta druhá stránka na mojeadd2.cz nějak poznala, že uživatel tam přišel jako výsledek redirektu z té první a ne napřímo. Jde to udělat nějakou kukinou nebo localstorage, to je jasný, ale jde to nějak bez toho? Abych nemusel měnit logiku té stránky a jen to nakonfiguroval na serveru?
Například, že by existoval něco jako referrer (něco takového existuje, ale nevím přesně jak to funguje) a v htaccessu by bylo možno udělat pravidlo, které by se do něj podívalo a pokud by tam nebyla ta první přesměrovávací stránka, tak by se to hodilo na error?
Díky za jakýkoli dobrý nápad, nejspíš něco přehlížím a odpověď bude nějak směšně jednoduchá, nevím.
01.12.2022 23:17
2
A co generovat nahodny hash, ten dat do url, presmerovat na cilovy web a tam tyto hashe zapisovat. Pri vstupu zkontrolovat, zda uz byl hash pouzity, cili je zapsany a pak je to error. Kdyz ne, stranku zobrazim.
01.12.2022 23:32
3
Díky za nápad. Ukládání hashů by bylo asi velice problemtické, nahromadilo by se jich tam miliarda a nevím, jak bych je pak procházel. Ale možná by šlo zakódovat např. do URL aktuální čas, cílová stránka by si ho rozkódovala a pokud by to neshouhlasilo plus minus pár vteřin, tak by se redirektovalo na error. 
Akorát já chtěl serverovou logiku, abych nemusel modifikovat tu cílovou stránku. Ale mohl bych ji zabalit na serveru do PHPka, který by zkontrolovalo ten čas a pak by buďto vracelo cílovou stránku nebo error. Asi funkční řešení. 
Díky.
02.12.2022 00:26
4
Taky tu je tohle ... https://stackoverflow.com/questions/...ost-parameters .. aka posílat hash v POST datech :D a pokud ten hash je v POST tak to fachá.

Pak tu je samozřejmě tohle https://stackoverflow.com/questions/...sent-to-server. Což by ti mělo fachat. (ale tohle má samozřejmě svoje technický problémy, který tam jsou zmíněný)
02.12.2022 08:06
5
Akorát já chtěl serverovou logiku, abych nemusel modifikovat tu cílovou stránku.

Nevim, zda si nepletes, co je serverova logika :)

Kazdopadne nemusi to byt unikatni hash. Dej si tam klidne aktualni cas. Akorat tam porad musis sahnout skrze PHP, coz je serverova logika.

A nebo tam chces sahnout skrze nejaky javascript?
02.12.2022 10:40
6
Nastav si nějakou cookies a na druhé straně přes htaccess jí ověř, nejspíš to na tvoj účely stačí.

Daleko více komplexněji to jde řešit přes JWT (json web tokens). Tady ale očividně nemáš webový server pod svojí kontrolou, ale chceš řešení na něm? Nenapsal jsi ani jaký máš hosting, jestli si server provozuješ sám, jaký používáš web server, pak je těžké ti radit jak to upravit.

Jestli správně rozumím, ty chceš mít nějakou formu autentizace, ale nechceš upravovat aplikaci. K tomu se dá použít spousta různých auth portálů (založených nad jwt, openid/oicd, kerberos), které předřadíš před tvoji aplikaci, tak to i běžně děláme a neřešíme přístupy v každé aplikaci zvlášť.

Pro apache server existuje třeba https://github.com/AnthonyDeroche/mod_authnz_jwt, který podporuje jwt, tj. podepsání parametrů v url, tak že na jiné url se ty parametry mohou validovat, k tomu ale potřebuješ mít možnost konfiguraci webového serveru upravit.
06.12.2022 19:45
7
A nestačilo by třeba na té první URL začít SESSION a v ní si celou dobu nést nějakou hodnotu proměnné. Když nebude SESSION proměnná obsahovat očekávanou hodnotu, tak ho prostě někam redirectni. Podobný princip, jako když se snaží někdo dostat do backendu (nebo jinam) bez prvního přihlášení se. Prostě ho vrátíš na login stránku.

Něco jako tohle:
Kód:
if(session_status() === PHP_SESSION_NONE) {
  session_start();
}

if(!isset($_SESSION["priseljsemzA"]) || $_SESSION["priseljsemzA"] !== true){
  header("location: login.php");
  exit;
}