Kanonizace – lomítka v url

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Marek Bartoš
Nette Blogger | 1263
+
+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 | 1263
+
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 | 1263
+
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 | 1263
+
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 | 1263
+
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 | 1263
+
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
Nette Core | 8218
+
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 | 1263
+
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