Přesměrování HTTP – HTTPS u formulářů

unbringer
Člen | 9
+
0
-

Zdravím,

Chrome začal upozorňovat na to, že formulář není zabezpečený. Všiml jsem si, že i přes nastavení .htaccess dle tutoriálu v Routing se v případě zaslání formuláře nepřesměrovává na protokol HTTPS.

.htaccess na úrovni projektu

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https

RewriteCond %{HTTP_USER_AGENT} !(BlackBerry)

RewriteCond %{HTTP_USER_AGENT} !(Windows\sNT\s5\.[12])

RewriteCond %{HTTP_HOST} ^(www\.)?domena.eu

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^$ www/ [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^/www/
RewriteRule ^(.*)$ www/$1

</IfModule>

Na routing jsem v rámci Nette vůbec nesahal:

public static function createRouter(): RouteList
	{
		$router = new RouteList;
		$router->addRoute
        (
            '<presenter>/<action>[/<id>]',
            'Homepage:default'
        );
		return $router;
	}

Nevíte prosím někdo, jak to opravit? Zkoušel jsem postupně promazávat některá pravidla, ale nepomohlo to.
Verze nette 3.0.

Díky.

Editoval unbringer (12. 12. 2020 14:08)

kalatalabnik
Člen | 35
+
0
-

Ahoj, běží ti to na tvém hostingu/virtuálu a můžeš upravit vhost? Udělal bych to tam. Pro mě je jednodušší udělat cca (než si hrát s .htaccess):

# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

Viz https://ssl-config.mozilla.org/#…

unbringer
Člen | 9
+
0
-

kalatalabnik:
Nad tím jsem taky přemýšlel, ale asi to nebude reálné. Mám hosting na endoře a není tam přístup k nastavení k serveru :(
Nicméně zkusím napsat na jejich podporu.

CZechBoY
Člen | 3608
+
0
-

To nastaveni vhosta od @katalabnik je spis htaccess, tak to muzes klidne pouzit tam.

unbringer
Člen | 9
+
0
-

To už ale v htaccessu nastavené mám.
V prvním příspěvku je to vidět, akorát je tam podmínka.

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
unbringer
Člen | 9
+
0
-

Vyjádření podpory na endora je takové, že si mám data zpracovat jinde než přesměruji na jinou URL.
Možná mám špatně vložený redirect?

Vytvoření komponenty formuláře

protected function createComponentSignInForm(): Form
    {
        $form = new Form;

        $form->addText('username', 'Kouzelnické jméno')
            ->setRequired('Prosím vyplňte své kouzelnické jméno.')
            ->setMaxLength(64);

        $form->addPassword('password', 'Heslo:')
            ->setRequired('Prosím vyplňte své heslo.')
            ->setMaxLength(32);

        $form->addSubmit('send', 'Přihlásit');

        $form->addProtection();

        $form->onError[] = array($this, 'errorForm');
        $form->onSuccess[] = [$this, 'signInFormSucceeded'];

        return $form;
    }

Zpracování formuláře a redirect na homepage, pokud vše dobře dopadlo

public function signInFormSucceeded(Form $form, \stdClass $values): void
    {
        try {
            $this->getUser()->login($values->username, $values->password);
            if ($this->getUser()->isInRole('Profesor')) {
                Utils::setActualSemester($this->getUser()->getIdentity(), $this->semester->GetActualSemester());
            }

            $this->flashMessage('Přihlášení proběhlo úspěšně.' ,"success");
            $this->redirect('Homepage:default');

        } catch (Nette\Security\AuthenticationException $authenticationException) {
            $this->flashMessage('Kouzelnické jméno nebo heslo není správně.' ,"danger");
        } catch (Nette\UnexpectedValueException $unexpectedValueException) {
            $this->flashMessage('Žádost o přístup nebyla doposud schválena. Pro urychlení zkuste kontaktovat pana profesora.' ,"danger");
        } catch (Nette\InvalidArgumentException $invalidArgumentException) {
            $this->flashMessage('Kouzelnické jméno nenalezeno.' ,"danger");
        }
    }
unbringer
Člen | 9
+
0
-

Díky všem, co se tomuto tématu věnovali. Nakonec jsem zjistil, že chyba byla pravděpodobně na serveru, který spravuje endora. Sami to píšou v návodu instalace nette na endora. Já jsem podle jejich návodu postupoval už před 2 měsíci, kdy jsem začal provozovat weba přenesl tam aplikaci z localhostu.
Z ničeho nic to po několika mailech s nimi začalo fungovat bez jakéhokoliv mého dalšího zásahu. Formulář už nepřesměrovává na HTTP (což chrome teď začal hlásit jako posílání nezabezpečených dat a bylo to velmi uživatelsky otravné).

Kdyby měl někdo někdy podobný problém, doporučuji tedy zkontrolovat .htaccess, poté zkontrolovat, jestli to nedělají jen formuláře po odeslání a když nebudete mít možnost zasáhnout do nastavení serveru, kde máte aplikaci vystavenou, kontaktovat správce. Já bych to ještě v nejzazším případě obešel nějakou vlastní route, ale kvůli testování aplikace na localhostu by to byl jen pracný workaround navíc.

Editoval unbringer (18. 12. 2020 16:58)