Kanonizace – lomítka v url
- Marek Bartoš
- Nette Blogger | 1263
Pomocí $presenter->autoCanonicalize se dá docílit neduplicitních url.
Ale chování se neaplikuje na vícero lomítek. Dá se toho nějak
docílit?
Například https://doc.nette.org/cs/2.x
Editoval Mabar (11. 2. 2017 13:19)
- Marek Bartoš
- Nette Blogger | 1263
RequestFactory má filter, který vícenásobná lomítka odfiltruje. Tím
pádem do routeru dorazí již opravená adresa, takže tam s tím vážně nic
dělat nemůžu. Navíc by se adresa ani nematchnula, protože co lomítko, to
parametr, pokud to nedonutíš chovat se jinak.
Ukázkový příklad z nette.org dávám z toho důvodu, že tímhle trpí
každá nettí aplikace. Viz třeba damejidlo.cz a rohlik.cz
Problém těchto lomítek je ten, že díky nim lze poznat aplikace v nette.
A já nechci, aby kdokoli věděl, na čem aplikace jede. I když je nette
bezpečné, tak je to zbytečná pomoc pro útočníka.
Abych trochu upřesnil otázku – jelikož mi dojde už upravená adresa a
k přesměrování dojde pouze v případě, že je v url jiný problém
(například lomítko na konci), jak mám tedy co nejjednodušeji zajistit, že
se provede přesměrování i v případě, že je jediný problém ve
vícenásobných lomítcích?
- Myiyk
- Člen | 321
Možností jak poznat nette aplikaci je více, např. dát do adresy
do=nonExistedHandle a stránka vyhodí chybu 500, protože v nette
nebude handle na obsloužení požadavku.
Nebo existence cookie nette-browser (kterou má rohlík.cz např.)
Edit:
není to chyba 500, ale chyba access denied a některá stránky místo ní
zobrazují 404
Editoval Myiyk (11. 2. 2017 22:22)
- Marek Bartoš
- Nette Blogger | 1263
nette-browser byla v nějakém updatu už před pár měsící vyhozena, protože většinou stejně nufungovala
Za ten do=nonExistedHandle díky. Mohl by jsi uvést fungující příklad? Nějak se mi to nedaří zreplikovat
- Marek Bartoš
- Nette Blogger | 1263
Bug to je, ale Davidovi se do refactoringu RequestFactory nechce (při pohledu na kód chápu proč) a tak si budu muset na pěkné řešení asi počkat do nette v3
- Marek Bartoš
- Nette Blogger | 1263
@DavidGrudl Jen pro ujištění, že o tom víš – dalo by se automaticky přesměrovat kvůli lomítkům? https://doc.nette.org/cs/2.x
- Myiyk
- Člen | 321
Reprodukuješ to jednoduše, vem si jakoukoliv stránku na rohlík.cz,
přidej do=a
a stránka bude 404, protože to udělá chybu access
denied, kterou oni maskujou, že ta stránka vůbec neexistuje.
U sebe na projektu mám chybovou hlášku access denied, tak to hází ji. Nezkoumal jsem, proč zrovna access denied.
- Myiyk
- Člen | 321
@DavidGrudl
Našel jsem chybu,
https://github.com/…tFactory.php#L28
tenhle regulární výraz převádí dva a více / na jedno /
Stačí to zakomentovat, aby z toho zbylo jen prázdné pole a funguje
to.
PS: testy taky projdou.
Stránka potom hází 404, což je správné výsledek za špatnou adresu.
Editoval Myiyk (11. 2. 2017 23:20)
- Marek Bartoš
- Nette Blogger | 1263
Že je to úplně v pohodě bych neřekl. Umožní to prázdné parametry, ale mohlo by to rozbít existující systémy, protože teď do aplikace může přijít NULL
- David Grudl
- Nette Core | 8218
Mabar napsal(a):
Bug to je, ale Davidovi se do refactoringu RequestFactory nechce (při pohledu na kód chápu proč) a tak si budu muset na pěkné řešení asi počkat do nette v3
Kod RequestFactory je skvělý a refactoringu se nebráním, jen prostě takové věci nepatří do setinkových verzí, takže to bude ve trojce.
- Marek Bartoš
- Nette Blogger | 1263
@DavidGrudl Rozhodně je, jen dá zabrat se v něm zorientovat
@Myiyk Za předpokladu, že se v parametru očekává cokoli. Jediné, co tam teď nemůe být je NULL. Nenapadá mě praktické použití, ale teoreticky to breaking change je. Což samozřejmě při vydání nové verze nette vadit nebude