Přesměrování HTTP – HTTPS u formulářů
- unbringer
- Člen | 9
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
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>
- unbringer
- Člen | 9
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
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)