Kanonizace – lomítka v url

Marek Bartoš
Nette Blogger | 1321
+
+1
-

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)

Myiyk
Člen | 321
+
0
-

Jak funguje zjištění duplicitní url:

  1. router přeloží url na akci
  2. router přeloží akci na nové url
  3. pokud se nerovná staré a nové url, přesměruje na nové url

Celá funkčnost tedy závisí na routeru. Takže negeneruj adresy s více lomítky :D

Marek Bartoš
Nette Blogger | 1321
+
0
-

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
+
0
-

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)

Myiyk
Člen | 321
+
0
-

S těmi rovnítky máš pravdu, o tom jsem nevěděl.
Troufnul bych si tvrdit, že to je bug.

Marek Bartoš
Nette Blogger | 1321
+
0
-

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 | 1321
+
0
-

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 | 1321
+
0
-

@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
+
0
-

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
+
0
-

Ta chyba s lomítky je zvláštní, v laděnce u routeru je dole napsáno GET a adresa bez těch lomítek.

Myiyk
Člen | 321
+
0
-

@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 | 1321
+
0
-

Ž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

Myiyk
Člen | 321
+
0
-

@Mabar napadá tě nějaký příklad, kdy se to rozbije?
nette/application testy prošly

David Grudl
founder | 8310
+
0
-

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 | 1321
+
0
-

@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

RSS tématu Téma zavřeno