Decryptování URL pro vyvolání presenteru a akce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
gawex
Člen | 8
+
0
-

Ahoj,

začínám s Nette a mám následující dotaz.

Potřebuji vytvořit Routu, která předá obsah URL mou napsané decryptovací funkci a následně vyvolá patřičný presenter a akci.

Tedy v prohlížeči zadám www.domena.cz/ebubcbrd/hmrdqs. Každý znak je v ASCI posunut o jeden výše (příklad = www.domena.cz/database/insert). Nyní to mám napsané jen pro akci a to pomocí filtru.

public static function createRouter()
	{

		$router = new RouteList;
		$router = new Route('<presenter>/<action>', [
                    'presenter' => 'Version',
                    'action' => 'default'
                     [

                        Route::FILTER_IN => function($input)
                                            {
                                                $array = str_split($input);

                                                foreach ($array as &$char)
                                                {
                                                    $asci = ord($char);
                                                    $asci += 1;
                                                    $char = chr($asci);
                                                }

                                                $output = implode("", $array);
                                                return $output;
                                            },

                        Route::FILTER_OUT => function($input)
                                            {

                                                $array = str_split($input);

                                                foreach ($array as &$char)
                                                {
                                                    $asci = ord($char);
                                                    $asci -= 1;
                                                    $char = chr($asci);
                                                }

                                                $output = implode("", $array);
                                                return $output;

                                            }
                            ],
                ]);
		return $router;
	}

Rád bych to udělal i pro presenter, ale tak abych to nemusel psát znovu. V dokumentaci jsem našel globální filtry, ale jejich použití se mi nedaří a není mi ani příliš jasné jak fungují.

Nejlepší by bylo zpracovávat celé URL, tak abych mohl zacryptovat i lomítka. Poradíte mi prosím jak na to?

Děkuji.

Editoval gawex (31. 7. 2017 13:09)

matopeto
Člen | 395
+
+1
-

Mohol by si nam prezradit, kvoli comu to potrebujes? :) Takato security obscurity isto ide urobit inak a spravne :)

Editoval matopeto (31. 7. 2017 13:28)

gawex
Člen | 8
+
0
-

Jedná se o zařízení, které bude logovat záznamy o docházce do databáze. Zařízení neumí komunikovat přes HTTPS, ani session. Proto potřebuji URL takto šifrovat.

matopeto
Člen | 395
+
0
-

Na tom zariadeni vies pustit kod, co ti to takto obskuruje? Pokial to zariadenie vies programovat, tak to zasfifruj pomocou asynchronnej sifry normalne s tym ze kluc(privatny) na sifrovanie bude priamo v zariadeni. A sifrovat budes post data a nie getove url. To sme ti uz ale asi pisali.

Pripadne si to „desifrovanie“ sprav az na prezentru, ktory by mal iba jeden parameter „encrypted“ kde by bol ten tvoj „sifrovany“ string.

dochazka/dfawdfsadf-sdfasdf-asdfasd s tym ze prezenter dostane to dfawdfsadf-sdfasdf-asdfasd „odsifruje“ a robi si s tym co chce…

Editoval matopeto (31. 7. 2017 13:58)

gawex
Člen | 8
+
0
-

Ano, v zařízení není problém se šifrováním. Šifrování probíhá pomocí dynamického klíče.
S každým příchozím požadavkem si server zjistí z databáze klíč, který si předtím vyměnily a pomocí něho rozšifruje to co mu došlo.

Mě nejde o to, jak napsat to dekryptovací funkci, ale o to jak i pak v routování použít.

Tedy, když příjde třeba …cz/sydgrtt/resztz, tak jak předat decryptovací funkci a následně vyvolat třeba zmíněný presenter database a akci insert…atd.

Zařízení toho příliš neumí. Jen poslat URL, na zadanou adresu. POST také neumí, a ten se dá v rámci sítě také odposlechnout.

matopeto
Člen | 395
+
0
-

Tak ako som pisal, ten tvoj „sifrovany“ string ako parameter akcie presentru, s „klasickym“ routovanim.

Editoval matopeto (31. 7. 2017 14:11)

gawex
Člen | 8
+
0
-

Ano, to zvládnu
a když chci zašifrovat i tu akci, potažmo presenter?

newPOPE
Člen | 648
+
+2
-

@gawex nasmeruj si routing na jeden presenter ktory to bude vediet desifrovat

new Route('/.../<encrypted>', 'Encrypt:');

a jedine co potom musis v danom Encrypt presenteri urobit je desifrovat si co ti prislo a tam urcite najdes aj parametre na ktore chces dane udaje poslat.

Osobne by som ale URL neskryval nemas preco (ani platobne brany to tak nerobia), terminal by posielal enkryptovane data na nejaku URL. Lebo takto musi mat terminal sajnu o routingu a ked budes chciet nieco zmenit tak terminaly asi tak rychlo dostupne nebudu aby si to vedel nastavit.

matopeto
Člen | 395
+
0
-

Jj tak som to myslel prezenter a akcia iba jeden, pripadne verejny, ako pisal kolega predomnou… (preto ti netreba sifrovat prezenter/akciu) – a co urobi sa rozhodne az tam podla toho co ti pride, kludne si tam zasifruj database/insert/userId12345, a potom napriklad,if (startwith(database/insert)) then db->insert elseif... pripadne cez dva parametre, napr insert a userid oba kludne „sifrovane“… ale to by si uz mal zvladnut

Editoval matopeto (31. 7. 2017 14:26)

gawex
Člen | 8
+
0
-

Díky za odpovědi a kdybych chtěl mít i ten presenter a akci šifrovanou? Ať to dotáhnu ke své spokojenosti?

matopeto
Člen | 395
+
0
-

tak vlastny filter na presenter a akciu, pripadne globalny filter.

<?php
$route = new Route('<presenter>/<action>/<id>', [
    'presenter' => [
        Route::VALUE => 'Homepage',
        Route::FILTER_IN => 'filterInFunc',
        Route::FILTER_OUT => 'filterOutFunc',
    ],
...
]);
?>

Viac na: https://doc.nette.org/…tion/routing

Editoval matopeto (31. 7. 2017 14:40)