Decryptování URL pro vyvolání presenteru a akce
- gawex
- Člen | 8
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
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
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.
- newPOPE
- Člen | 648
@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
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)
- matopeto
- Člen | 395
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)