Автор Тема: Запомняне на паролата от web логин форма. Chrome?  (Прочетена 1571 пъти)

Naka

  • Участник
  • *****
  • Публикации: 2235
    • Профил
Имам следният проблем, който е от много време и не мога да го реша.
Имам обикновенна веб форма:

Код:
<form action="javascript:void(0);" method='POST' id='txtAuth' onsubmit='encryptData() >
<input type="text" name="user"  size="10" />
<input type="password" name="passwrd"  size="10" />
        <input type="submit" value="Вход" />
</form>

След събмит браузера обикновенно предлага да се запомни ли юзернема и паролата.
Обаче аз правя и някои 'фокуси' по формата с JS, преди събмита. И тук почват проблемите.
Лисицата работи идеално, а всички Хроме базирани браузери  не.  Хрома не предлага да се запомни паролата!!! Иначе всичко друго му работи.

Проблемът който го разбрах е фундаментален. Лисицата предлага запомняне на паролата преди Събмита. Лисицата не я интерсува какво правиш с формата по нататък, интересува я какво си въвел във формата.
А хрома работи различно. Хрома предлага запомняне на паролата след като е настъпил Събмита. ???

И понеже аз правя някои работи с формата преди събмита, то Хрома не предлага запомняне.
Идеии?
Няма ли някакъв JS метод с който може да се форсира запомняне на паролата от браузера. Идва ми на ума и друго нещо. Има два JS метода с които може да се запомнят данни на клиентският компютър.

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

Едното е sessionStorage - (да не се бърка със сесия!) и то трае докато има отворен браузер - след това се изтрива. Това очевидно не върши работа.

Другото е с localStorage. Това е перманенто и оцелява след затваряне на браузера. Но доколко това е правилно решение?
 

------
PS Не искам да го правя с https:// засега по различни причини. все още не му е дошло времето.


« Последна редакция: Мар 02, 2018, 17:23 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Участник
  • *****
  • Публикации: 2513
    • Профил
Не се занимавам с тези неща и каквото зная е почти от обща култура, но...

Запомнянето на паролата не е ли просто бизквитка без краен срок, която просто помни потребител и сумата на  паролата? Какво повече е нужно? В крайна сметка, към сайта не се изпраща самата парола и без туй.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

n00b

  • Участник
  • *****
  • Публикации: 1183
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Ако си ми пред очите ще ти издърпам ушите.

Ето код:
<body>
    <form action="test.html" name="formlogin" id="formlogin">
        Username: <input type="text" name="username" id="username" />   
        Password: <input type="password" name="password" id="password"/>
        <input type="submit" name="Submit" value="Submit" />
    </form>
</body>
При това ще се покаже "запазването" защото имаш екшън и сочи към нещо.

Ако се налага да правиш корекция по формата - ето пример - onsubmit:
<form name="login_form" id="login_form" action="" method="POST" onsubmit="handleFunction('action_login', document.getElementById('user_name_id').value, document.getElementById('password_id').value); return false;">
    <div class="login_line">name<input name="user_name" id="user_name_id" size="16" maxlength="16" value="" type="text"></div>
    <div class="login_line">password<input name="password" id="password_id" size="16" maxlength="16" type="password"></div>
    <div class="login_line">&nbsp;<input class="icon icon_accept" value="login" type="submit"></div>
</form> <!-- login_form -->

Събмита можа да дрънне един false и да спре изпращането на формата. Виж си документацията.
Активен

mobilio - професионални мобилни приложения

Naka

  • Участник
  • *****
  • Публикации: 2235
    • Профил
Събмита можа да дрънне един false и да спре изпращането на формата. Виж си документацията.

Аз нарочно сложих <form action="javascript:void(0);" ..
За да съм абсолютно сигурен че няма да се събмитне в прав текст паролата (например към  <form action="test.html" ..) ако случайно не сработи onsubmit='encryptData()

Вътре в encryptData() в края и - да имам return false; но какво ще стане ако
в encryptData() ако някъде средата има например синтактична грешка? По спомени тогава не се стигаше до return false; и формата се събмитваше. ??? в encryptData() ползвам и чужд js код (за RSA) ...та и не съм много уверен какви ги върши. Сега не ми се ръчка пак работещ код пак да го пробвам....


В краен случай да и това е решение....Доста време съм я тествал работи вече 3 години и и хванах вяра.

въпрос:
има ли разлика между
Код:
<form.... onsubmit='encryptData(); return false;'>
и когато е само вътре  ???

Код:
<form.... onsubmit='encryptData();'>
function encryptData()
{
..
..
return false;
}
« Последна редакция: Мар 06, 2018, 11:05 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

n00b

  • Участник
  • *****
  • Публикации: 1183
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
onsubmit сработва на ниво форма. А има и глобален onsubmit който работи на ниво прозорец.

да - ако има грешка не сработва. В гитхъб има 100на кодове поне.

между двата НЯМА разлика.
Активен

mobilio - професионални мобилни приложения

remotexx

  • Участник
  • *****
  • Публикации: 542
    • Профил
Има разлика колеги
желателно е винаги да се вика експлицитно (когато ст-та не зависи т.е. не се променя/наглася във функцията)  и не е само за четимост

т.е. това е винаги за предпочитане (ако се знае предварително какво искаме true/false)
onsubmit='encryptData(); return false;'
onsubmit='encryptData(); return true;'

защото функцията може да върне true/false но може и да върне undefined или exception и т.н.
а това е лоша практика
onsubmit='return encryptData();'
защото напр. ако забравиш един return по подразбиране ф-ята ще върне undefined
return [[expression]]; - The expression whose value is to be returned. If omitted, undefined is returned instead.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return

или напр. ако от некадърен код за де/криптиране дойдат изключения като 'Divide by zero error'  ;D
Активен

4096bits

  • Участник
  • *****
  • Публикации: 2513
    • Профил
Разбирачи, я дайде линк към добри уроци по JS. Или по-добре, да пробвам да науча Node?
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

n00b

  • Участник
  • *****
  • Публикации: 1183
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
ами... то там сега сложно има разни ES5, ES6 и други кючеци.

Освен ако не търсиш за чистия JS?
Активен

mobilio - професионални мобилни приложения

Naka

  • Участник
  • *****
  • Публикации: 2235
    • Профил
след смяна на
Код:
<form action="" method='POST' id='txtAuth' autocomplete='on' onsubmit='encryptData(); return false;' >

Проблема при Хрома остана. Не се оправи. :'( Нещо много на дълбоко е. Хрома прави някакви гимнастики да определи след логина дали наистина си се логнал и чак тогава оферира 'запази паролата'. А той откъде ще знае как работи сайта ??? ??? ???

А FF нали е по 'тъпичък' работи. Даже ти предлага да запомни и грешнo въведена име/парола. :o 

PS: ---------
action="" е валиден относителен адрес в текущият домейн: example.com/'' . но даже и да е action="test.php" пак не работи и това го пробвах....

Тук има описан същият проблем...Но е от 2010 и както изглежда, че още не е оправен. Явно хромаджиите го броят за feature.
https://bugs.chromium.org/p/chromium/issues/detail?id=43219

Цитат на: 4096bits
Разбирачи, я дайде линк към добри уроци по JS.
Аз JS хич не го обичам. Бърка ми в мозъка. За всеки проблем ровя по-отделно в нета.
« Последна редакция: Мар 14, 2018, 14:27 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Участник
  • *****
  • Публикации: 2513
    • Профил
ами... то там сега сложно има разни ES5, ES6 и други кючеци.

Освен ако не търсиш за чистия JS?
Знам ли?! Каква е разликата?
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

n00b

  • Участник
  • *****
  • Публикации: 1183
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Проблема при Хрома остана. Не се оправи. :'( Нещо много на дълбоко е. Хрома прави някакви гимнастики да определи след логина дали наистина си се логнал и чак тогава оферира 'запази паролата'. А той откъде ще знае как работи сайта ??? ??? ???


Дай линк да го видя
Активен

mobilio - професионални мобилни приложения

Naka

  • Участник
  • *****
  • Публикации: 2235
    • Профил
Докарах го до някъде...Успях да го накарам да излезе pop-up за запомняне....При мен проблема е бил, че наред с видимата форма имам и друга скрита форма която я събмитвам с JS. И събмитването на друга форма не се харесва на Хрома. Направих го с XMLHttpRequest() вместо с *.submit(). Но не само това го спираше има още подробности >:( >:(
Като го дооправя ще пиша подробно.

Междувременно имам няколко допълнителни въпроси.

1. При отказана оторизация -от веб форма!!! кой статус код  (4xx) трябва да се върне?
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors

Най-много приляга 401 Unauthorized. Но той пък е за другите оторизации - basic, digest (не е за веб форми). И стандарта изисква да се върне заедно с него и  WWW-Authenticate ??? ??? ???
(WWW-Authenticate: предизвиква съвсем друга реакция на браузера. Той предизвиква поп-ап за парола, който поп-ап е на самият бразузер. Това съвсем не е необходимо!!!!!!)
Най-много да понарушим стандарта и да не изпращаме WWW-Authenticate :D

403 Forbidden и той не става. Той по скоро е откъз до достъп до ресурс и има смисъл на permanently forbiden и то за всички юзери. Нищо в него не казва че клиента може да опита пак и да се поправи.

------------------------
2. За спирането събмита на формата има ли разлика между

Код:
<form.... onsubmit='encryptData(); return false;'>
.....
и
Код:
<form.... onsubmit='event.preventDefault(); encryptData();'>
.....



« Последна редакция: Мар 27, 2018, 15:48 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

n00b

  • Участник
  • *****
  • Публикации: 1183
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Връщаш си 200 ОК.
Активен

mobilio - професионални мобилни приложения

Naka

  • Участник
  • *****
  • Публикации: 2235
    • Профил
Връщаш си 200 ОК.

Ха ха ама не става. Са като го оправих проблема - възникна противоположният проблем. Сега пък не мога да го спра. ;D :o  ;D Винаги излиза този поп-ап за запомняне....... И при грешна парола.

Спирам го само с 4хх код!!! Та те така.
« Последна редакция: Мар 28, 2018, 20:57 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Chromium и Chrome
Идеи и мнения
cybercop 16 3314 Последна публикация Май 24, 2011, 20:55
от AMD
Проблем с Chrome 12
Настройка на програми
NikolaiTalev 7 1374 Последна публикация Юни 14, 2011, 07:57
от cybercop
Драйвъри или проблем с chrome
Хардуерни и софтуерни проблеми
ventsi34 1 746 Последна публикация Ное 29, 2013, 20:51
от backinblack
проблем с chrome
Настройка на програми
jovani900 12 1693 Последна публикация Апр 17, 2015, 10:33
от 4096bits
ПРЕМЕСТЕНО: проблем с chrome
Хардуерни и софтуерни проблеми
neter 0 535 Последна публикация Апр 16, 2015, 18:22
от neter