Problém s AddProtection a Internet Explorerem
- Klokan
- Člen | 47
Ahojte,
mám v logovacím formuláři přidáno addProtection. Všude to bez problémů
funguje, ale teď jsem to zkusil na IE6 i 8, a v obou mi to hlásí že
„vypršela doba platnosti“ a nedostanu se přes to. Zkoušel jsem různá
nastavení, ale neodstraním to. Pokud to vyhodím, tak mi po pár kliknutích
vyprší session a chce to po mě nové přihlášení. Ale dělá to jen IE a
zkoušel jsem to na třech různých serverech a všude stejné. Nesetkal jste
se s tím někdo ?
- jardo
- Člen | 17
Klokan napsal(a):
Ahojte,
mám v logovacím formuláři přidáno addProtection. Všude to bez problémů funguje, ale teď jsem to zkusil na IE6 i 8, a v obou mi to hlásí že „vypršela doba platnosti“ a nedostanu se přes to. Zkoušel jsem různá nastavení, ale neodstraním to. Pokud to vyhodím, tak mi po pár kliknutích vyprší session a chce to po mě nové přihlášení. Ale dělá to jen IE a zkoušel jsem to na třech různých serverech a všude stejné. Nesetkal jste se s tím někdo ?
Ahoj
Ja mám na jednom webe problém ten, že mi pri každom pokuse o prihlásenie (cez formulár s AddProtection) píše „Security token did not match. Possible CSRF attack.“. Na inom projekte mi to nerobí. Rozdiel vidím vo verzii Nette, skús upgrade na poslednú verziu.
- JakubKohout
- Člen | 92
Dnes jsem si pustil web na IE8 a baf ho, taky mi to všude vyhazovalo tuhle chybu. Takže bych to viděl na úpravu nette, protože úprava klienta není možná …
- JakubKohout
- Člen | 92
Ano problém je v tom že IE8 posílá ajaxovejma dotazama podivný
hlavičky.
Řešení je jednoduché v /nette/web/session.php metoda generateVerificationKey
jsem vypnul kontrolu všech hlaviček (encoding, charset, user-agent, language).
Neni to nejbezpečnější riziko ale tak nějak nebyl čas zjišťovat která
to dělá.
A mimochodem je rozdíl mezi IE8 na XP a na Win7. Chovájí se malinko odlišně co se týče posílanejch hlaviček.
- David Grudl
- Nette Core | 8228
Ty problematické hlavičky jsem se snažil řešit, nevíš o nějakých dalších, které je třeba obejít?
- Klokan
- Člen | 47
Zkoušel jsem zakomentovávat jednotlivé hlavičky a došel jsem k tomu,
že to dělá hlavička Accept-Language.
Test proběhl na IE6.0.
Zítra se podívám na IE8.
<?php
$httpRequest = $this->getHttpRequest();
$key[] = $httpRequest->getHeader('Accept-Charset');
$key[] = $httpRequest->getHeader('Accept-Encoding');
// $key[] = $httpRequest->getHeader('Accept-Language'); // Tohle je ten problem
$key[] = $httpRequest->getHeader('User-Agent');
if (strpos($key[2], 'MSIE 8.0')) { // IE 8 AJAX bug
$key[1] = substr($key[1], 0, 2);
}
/*
if (strpos($key[3], 'MSIE 8.0')) { // IE 8 AJAX bug
$key[2] = substr($key[2], 0, 2);
}
*/
?>
- David Grudl
- Nette Core | 8228
On se snaží Accept-Language oříznout v případě MSIE 8. Že se stejná chyba objevuje i v IE6 je překvapení.
- fenix
- Člen | 16
Prave resime nejspis stejny problem. Po prihlaseni uzivatele neprojde
isAuthenticated() respektive isInRole();
Bohuzel zadne ze zminovanych reseni nepomohlo.
Zajimave je ze se to stalo jen na jednom pocitaci, kde je win7 a ie8.
Problem se vyresil, kdyz se zrusilo
$this->getSession()->regenerateId();
v
User.php
.
Predpokladam, ale ze se jedna o bezpecnostni prvek. Co se tyce techto veci, tak
hluboko me znalosti nesahaji.
Otazka je, co ted s tim.
- MzK
- Člen | 127
Googlil jsem a mám asi stejný problém…
Bude to něco s cookies a sessions a ie a hosting?
Přihlašování mi funguje v Opeře, firefoxu a na localhostu i na internet
exploreru..
Ale na hostingu mi přihlašování funguje v opeře i firefoxu.. Ale na
internet exploreru neprojde toto:
<?php
$user = environment::getUser();
if (!$user->isAuthenticated()) { // pokud prihlaseni expirovalo
}
?>
takže mne to hned po přihlášení odhlásí… Jenom v internet
exploreru..
Nastaveno mám toto:
<?php
//bootstrap
$session = Environment::getSession();
$session->setSavePath(TEMP_DIR.'/sessions');
$session->setExpiration("+ 15 days");
//userModel.php
if ($sql) { // prihlaseni OK.
$identity = new Identity('affilater');
$identity->affil_id = $sql['affil'];
return $identity;
}
// userPresenter
public function renderAdmin() {
$user = environment::getUser();
if (!$user->isAuthenticated()) { // pokud prihlaseni expirovalo
$this->flashMessage('Odhlášen pro dlouhou neaktivitu.');
$this->redirect('affilate:');
}
?>