`nette-samesite` trvale? Jak řešit <iframe>?

JaxP
Člen | 62
+
0
-

Zdravím,
všiml jsem si, že v Nette 3.0 je na více místech použita funkce isSameSite() v návaznosti na cookie nette-samesite. Což znamená, že formuláře jsou z iframu nefunkční (resp. končí na redirect('this')). Z pohledu CSRF je to fajn, ale co v situaci, kdy opravdu chci povolit zpracování handlerů z iframu (třeba pro konkrétní URL). Je zde nějaká možnost konfigurace nebo nastavení?

Děkuji

Editoval JaxP (7. 10. 2019 15:19)

David Grudl
Nette Core | 8227
+
0
-

Můžeš přesněji popsat, jakou úlohu řešíš? Jde o iframe odesílající formulář na jinou doménu?

JaxP
Člen | 62
+
0
-

Ne, formulář odesílá stále na svou doménu.

Příklad:

  1. Máme Nette na doméně XY.cz. Stránka obsahuje formulář. Nikdy nesměruje nikam ven – vše se odehrává stále na stejné doméně ve stejném prostředí.
  2. Následně máme jiný web na doméně YZ.cz, která zobrazuje naši stránku jako <iframe>. Routování funguje, ale odesílání formuláře ne. ⇒ tzn. formulář se vykreslí, já ho vyplním a odešlu. Následně skončím v Application\UI\Form v signalReceived(...) na podmínce !$this->getPresenter()->getHttpRequest()->isSameSite() resp. $this->cookies['nette-samesite'] (které v cookies opravdu není v tomto případě).
David Grudl
Nette Core | 8227
+
+4
-

Přidal jsem $form->disableSameSiteProtection();

Stejsi
Člen | 21
+
0
-

David Grudl napsal(a):

Přidal jsem $form->disableSameSiteProtection();

Díky Davide, také to teď řeším.
Kdy zhruba to budeš commitovat?

Neuvažuješ že by si to přidal i do configu?

Zkoušel jsem nastavit

`http:
frames: true`

a

`session:
cookieSamesite: null`

ani jeden z těchto parametrů odesílání formuláře v iframu (který není na stejné doméně) nevyřešil.
Takže hromadně pro formuláře by se to mohlo nastavit nějak takto?

`form:
csrf: false`

Ještě jednou děkuji a ať se daří :-)

Editoval Stejsi (22. 10. 2019 17:50)

David Grudl
Nette Core | 8227
+
+2
-

Hromadně to nastavit pro formuláře lze tak, že budeš všechny vytvářet společnou továrničkou a v ní zavoláš $form->disableSameSiteProtection().

Jiný způsob není možný, protože formuláře se globálně nekonfigurují.

Marek Bartoš
Nette Blogger | 1274
+
+2
-

Kdy zhruba to budeš commitovat?

Včera. https://github.com/…57422d8aaaef

Stejsi
Člen | 21
+
0
-

David Grudl napsal(a):

Hromadně to nastavit pro formuláře lze tak, že budeš všechny vytvářet společnou továrničkou a v ní zavoláš $form->disableSameSiteProtection().

Jiný způsob není možný, protože formuláře se globálně nekonfigurují.

Díky moc za odpověď.
Commit jsem našel a použil to jak říkáš.
Formuláře v iframu již fungují.

Ještě jsem narazil na jeden problém s framem,
když postuji pomocí xhr (javascriptu) form data na do handle na serveru (konkrétně upload souboru),
tak mi to v iframu (pouze v iframu, jinak to jde) vrací pro danou url adresu status 303 a soubor se nenahraje.

Nějaký nápad, čím by to mohlo být..? :-)

Do handle požadavek vůbec nedojde.

Díky za pomoc!!!!

Editoval Stejsi (22. 10. 2019 21:56)

David Grudl
Nette Core | 8227
+
+3
-

To bude asi stejná příčina. Zkus u handle doplnit anotaci:

/**
 * @crossOrigin
 */
function handleXy()
{}
Barbarossa
Člen | 74
+
0
-

Ahoj, řešíme teď stejnou situaci pro codeception (contributte), který ve svém http nemá isSameSite() ani naimpelmetovaný a než to řešit tam, tak mě přijde hezčí mít možnost to v konfigu úplně vypnout. Nebo mám udělat PR, který tam tu implementaci doplní? Díky

Editoval Barbarossa (30. 3. 2020 13:28)

Marek Bartoš
Nette Blogger | 1274
+
0
-

Doplnit do codeception, metoda není v interface jen z důvodu BC breaku