Autor | Zpráva | ||
---|---|---|---|
Tori Profil |
#1 · Zasláno: 11. 8. 2010, 23:57:07
Pracuji na přihlašování uživatelů technikou výzva-odpověď (upravená verze návodu J.Vrány), a narazila jsem na chování formuláře, které si nevím vysvětlit. Ukázka:
<script> // .... funkce getChallenge() a hmac() fungují podle očekávání, takže nevypisuji function sha1form(f) { if (!challenge) { // ověření, jestli se ajaxem získala poslední použitá výzva pro zadané uživatelské jméno return false; } f['password'].disabled = true; f.submit(); f['password'].disabled = false; return true; } </script> <form action="" method="post" onsubmit="return !sha1form(this);"> <input type="hidden" name="pwd_hash" value=""> <table cellpadding="3"> <tr><td class="name">Uživatel:</td><td> <input type="text" id="username" name="username" onchange="getChallenge(this.form);" maxlength="32" size="20"> <script>document.getElementById('username').focus();</script> </td></tr> <tr><td class="name">Heslo:</td><td> <input type="password" name="password" onchange="hmac(this.form);" size="20"></td></tr> <tr><td colspan="2"><input type="submit" value="Přihlásit"></td></tr> </table> </form> Při odeslání formuláře se má vypnout pole 'password', a odešle se jen otisk hesla. Pokud má uživatel vypnutý JS a pošle heslo jako plain text, je přihlášen s nižším oprávněním. Jde o to, že se mi odesílalo i pole 'password', přestože bylo vypnuté ve chvíli odeslání formuláře (jak jsem si ověřila přes alert(f['password'].disabled) ). Nakonec pomohlo negovat návratovou hodnotu u sha1form(), jak zvýrazněno. Můžete mně, prosím, poradit, proč to funguje takhle? Myslela jsem, že když funkce v atributu onsubmit vrátí false, tak se formulář neodešle = pokud přidám negaci, tak se odešle jen pokud proměnná challenge bude prázdná. Snažila jsem se odpověď najít na netu, ale pořád mi připadá, že to funguje přesně opačně, než by mělo. Děkuji moc za vysvětlení. |
||
Fred Profil |
#2 · Zasláno: 12. 8. 2010, 11:20:47
I když je disabled stále má hodnotu.
příklad: <input type="password" id="psw" disabled="disabled" value="heslo"> <input type="button" onclick="alert(document.getElementById('psw').value)"> |
||
Chamurappi Profil |
#3 · Zasláno: 12. 8. 2010, 12:38:37
Reaguji na Freda:
Hodnotu sice má, ale ta se při stavu disabled neodesílá.
Reaguji na Tori: „Myslela jsem, že když funkce v atributu onsubmit vrátí false, tak se formulář neodešle“ To je pravda. Ale v uvedeném kódu (bez negace) se prohlížeč ptá tvého onsubmit u: Mám se odeslat? — a tvůj onsubmit mu odpovídá: Zakaž heslo, odešli se, povol heslo a ano, máš se odeslat. Na to první odeslání f.submit() nemá dostatek času a při druhém už heslo povolené je.
|
||
Tori Profil |
#4 · Zasláno: 12. 8. 2010, 13:38:25
Chamurappi:
Díky moc! |
||
Časová prodleva: 14 let
|
0