JS: сохранение логина и пароля пользователя

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

JS: сохранение логина и пароля пользователя

Сообщение IMB »

Доброго дня!
Возможно ли в JavaScript сохранить логин и пароль пользователя в переменные после авторизации, нечто наподобии $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] из PHP?
Поиск не даёт вразумительного ответа.
Спасибо.
Спасибо сказали:
Аватара пользователя
nickm
Сообщения: 203
ОС: RFRemix

Re: JS: сохранение логина и пароля пользователя

Сообщение nickm »

Засунуть в cookies?
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Спасибо, совсем забыл про cookie. Теперь осталось только решить проблему с шифрованием пароля.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 12:19
осталось только решить проблему с шифрованием пароля.

Посмотрите библиотеку crypt (функция crypt).
Например, вот так можно получить sha-шифрование:

Код: Выделить всё

char *sha(char *str, char *salt){
    char *tmp = crypt(str, salt);
    return strdup(tmp);
}
...
    snprintf(salt, 128, "$5$%s$", IP);
    id = sha(URL, salt);
    id = strrchr(id, '$') + 1;

Посмотрите один из вариантов реализации аутентификации/авторизации. Может, чем-нибудь да поможет (правда, это немного устаревший вариант, в новом добавлено сохранение нескольких кук в случае, если веб-страница делает запросы нескольким CGI).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Спасибо, буду изучать. Только реализовать это шифрование, скорее всего, придётся на JS. Но сам алгоритм всё равно будет полезно посмотреть.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 13:01
Только реализовать это шифрование, скорее всего, придётся на JS.

Можно и так. Но мне показалось, что проще передавать на сервер имя пользователя и пароль в SSL-обертке. В javascript с вариантами шифрования похуже, чем в том же C.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: JS: сохранение логина и пароля пользователя

Сообщение neol »

А нафига это вам надо?
Спасибо сказали:
Аватара пользователя
nickm
Сообщения: 203
ОС: RFRemix

Re: JS: сохранение логина и пароля пользователя

Сообщение nickm »

neol писал(а):
16.08.2010 14:23
А нафига это вам надо?

Кстати, присоединюсь к вопросу. Обычно после авторизации выдается кука с ID сессии (там может быть что угодно, типа sha1 от строки "${login}--${ip}"), она же храниться на сервере (в кеше, базе итд, зависит от реализации) и по этой куке происходит определение свой/чужой, а пароли гонять по сети постоянно как-то не тема.
Или просто какая-то хитрая логика?
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Есть железка, конкретно IP-камера, которая поддерживает стандарт ONVIF (http://www.onvif.org/).
Дамп обмена по этому стандарту показал, что каждый запрос от клиента содержит секцию SOAP-ENV:Header, которая сожержит авторизационные данные, логин и пароль закодировнный в PasswordDigest, и дату создания запроса.
К данной камере предполагается приделать web-интерфейс для управления. Ну а так как не хочется выполнять лишней работы, то пока одним из вариантов рассматривается использование ONVIF для управления. Вариант с внешними скриптами не отменяется, но это двойная работа.
Спасибо сказали:
Аватара пользователя
nickm
Сообщения: 203
ОС: RFRemix

Re: JS: сохранение логина и пароля пользователя

Сообщение nickm »

тогда понятно. Особенно, если webморда в инет смотреть не будет :)
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Формально может, но на этот случай есть работа по https.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Что то погода, и наверное близость отпуска, действуют отупляюще.
Понятно, что нужные данные можно сохранить в cookie, весь вопрос в том откуда эти данные получить. Для PHP я привёл переменные содержащие интересующие меня данные, а откуда я их могу получить в JavaScript?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 19:12
а откуда я их могу получить в JavaScript?

Из формы, вестимо :)

Код: Выделить всё

function subm(id){
    var str, str1, i;
    var login = $('login').value;
    var pass = $('passwd').value;
    if(login == "" || pass == ""){
        if(id) $(id).focus();
        return;
    }
    var str = "login=" + login + " passwd=" + pass;
...
}

Ну, а если данные надо получать от сервера, делайте xmlhttprequest и получайте их из него.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Из формы это хорошо. А чт оесли у меня Basic авторизация? ;)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 19:32
Из формы это хорошо. А чт оесли у меня Basic авторизация? ;)

Тогда из запроса, вестимо.

IMB, вы бы "на пальцах" объяснили поподробнее, что именно хотите получить. Тогда бы и советы были поточнее.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

eddy, Вы правы, что-то я плаваю.
Как я говорил, есть IP-камера с поддержкой стандарта ONVIF, но у камеры нет web-интерфейса и нашим менеджера это не очень нравится, да и думаю клиенты не будут в восторге.
И сейчас я решаю как с наименьшими затратами и наибольшими перспесктивами решить эту задачу. Камера построена на базе ARM-процессора, в качестве web-сервера mini-httpd, так как он поддерживает SSL. Использование дополнительго софта не очень желательно по причине необходимости кросс-компиляции, лениво мне это делать, и ограниченности ресурсов. Поэтому использование PHP, Ruby, Perl и т.д. не приветствуется и планируется реализовать весь web-интерфейс на html, JS и bash, в случае использования CGI.
Пока вырисовываются два решения:
- использование ONVIF, из минусов видится сильная завязка на JS для отправки/получения запросов и отрисовки интерфейса
- использование CGI, минус - дублирование существующего фукционала
Пока склоняюсь к использовании ONVIF, но для его использования необходимо решить вопрос с хранением и повторным использованием логина/пароля пользователя.
Ну вот, как то так...

eddy, ссылочкой на разбор запроса не поделитесь? ;) А то я что-то ничего подобного у Флэнагана (http://www.books.ru/shop/books/614058) не нашёл, потому и спросил.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 20:12
ссылочкой на разбор запроса не поделитесь?

Я же вам дал ссылку на свою реализацию, там в файле pass.html есть строки

Код: Выделить всё

    var QS = window.location.search.substring(1);
    var pars = QS.split("&");
    var i=0, s;
    while((s=pars[i++])){
        if(s.indexOf('URL') == 0){
            s = s.split('=');
            URL[URL.length] = s[1];
        }
        else if(s.indexOf('RTN') == 0){
            s = s.split('=');
            RTN = s[1];
        }
    }

Вот аналогично, через substring и split и делайте.
Для реализации аутентификации из своего интерфейса попробуйте XSS (межсайтовый скриптинг), только не забудьте добавить в CGI на стороне камеры строку

Код: Выделить всё

echo -e "Access-Control-Allow-Origin: http://адрес_сервера_с_вебмордой\nAcess-Control-Allow-Methods: POST\nContent-type:multipart/form-data\n\n"

RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Всё, точно пора в отпуск. Жара в достала, мозги плавятся.
Извиняюсь за тупизм, беру неделю на разбор полётов. Если возникнут вопрос постараюсь более полно формулировать вопросы, а как известно в правильном вопросе содержится до половины ответа.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

IMB писал(а):
16.08.2010 20:55
Всё, точно пора в отпуск. Жара в достала, мозги плавятся.
Извиняюсь за тупизм, беру неделю на разбор полётов.

:)
Я сам сегодня первый день в отпуске (взял на 2 недели, уже 2 года в отпуске не был). Уже надоело мокнуть и мерзнуть, поеду на недельку погреться в +35 :)
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

eddy писал(а):
16.08.2010 21:01
:)
Я сам сегодня первый день в отпуске (взял на 2 недели, уже 2 года в отпуске не был). Уже надоело мокнуть и мерзнуть, поеду на недельку погреться в +35 :)

Welcom to Moscow my friend! Прошу простить мой французкий. У меня всё наоборот, мокнуть и мёрзнуть не хочется, но каждый вечер душ из холодной воды.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: JS: сохранение логина и пароля пользователя

Сообщение watashiwa_daredeska »

Если все равно всё будет завязано на JS, то сделать AJAX-style, не перезагружать страницу (только менять ее части жабаскриптом) и хранить login/pass просто в переменных жабаскрипта.

Хранить в cookie логин/пароль в reversible виде в куках -- ужасно. Лучше уж тогда создать авторизационный CGI рядышком, который будет авторизовать, выдавать куку, а при наличии куки будет сообщать логин/пароль, которые скрипт сможет использовать не сохраняя нигде, кроме переменных. В очередной раз пользователю не понадобится вводить логин/пароль, т.к. имеется кука.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

А не затруднит более подробно расписать алгоритм?
Скажем, после Basic авторизации пользователь попадает на некую страницу. Эта страница должна сразу отобразить информацию, информацию можно получить только с сервера с использованием логин/пароль.
Следущим шагом пользователь переходит на другую страницу которая также берёт данные с сервера с использованием предыдущего алгоритма.
Откуда JS узнает логин/пароль пользователя?

Или предлагается при авторизации выставлять одну куку и переходе на каждую страницу запрашивать сервер на корректность этой куки и приположительном ответе сервер отвечает парой логин/пароль?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: JS: сохранение логина и пароля пользователя

Сообщение eddy »

Заведите на сервере веб-морды простенький сервис авторизации. Если пользователь прошел аутентификацию, сохраняйте у него куку с идентификатором сессии. Затем, как только пользователь пытается поработать с веб-камерой, вы просто джаваскриптом проверяете, есть ли сохраненная кука с идентификатором. Если она есть, передаете своему серверу этот идентификатор (в запросе), а в ответе на запрос отдаете пароль и логин (если уж это так нужно).

Но лучше вообще не передавайте эти данные - используйте XSS - пусть сервер сам "стыкуется" с веб-камерой и передает ей нужные данные.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: JS: сохранение логина и пароля пользователя

Сообщение IMB »

Ну так веб-камера и является сервером, именно с ней и предстоит общаться.
Ладно, в любом случае надо время на обдумывание.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: JS: сохранение логина и пароля пользователя

Сообщение watashiwa_daredeska »

IMB писал(а):
17.08.2010 13:46
А не затруднит более подробно расписать алгоритм?
1. Пользователь вводит адрес.
2. Подгружается JS.
3. JS запрашивает (через XHR, без перезагрузки страницы) "страницу аутентификации".
4. Если у пользователя уже стоит "сессионная кука", goto 6.
5. Пользователю показывается форма аутентификации или предлагается basic authentication.
6. После прохождения аутентификации выдаётся простая страничка, на которой написаны логин/пароль, чтобы JS мог отпарсить (например, JSON). Вместе с этой страничкой сервер присылает "сессионную куку" (тогда при следующем входе, шаг 5 будет пропущен и пользователю не нужно будет заново вводит пароль).
7. JS парсит логин/пароль, сохраняет в переменных (но не в куках, localStorage или ещё в каком подобном месте) и может использовать для формирования дальнейших запросов к камере.
Всё это делается жабаскриптом на одной странице, без её перезагрузки.

Можно модифицировать алгоритм для не-AJAX, тогда на страницу аутентификации делается редирект с параметром "куда возвращаться". Страница аутентификации после успешного опознавания пользователя устанавливает куку и редиректит, а JS также запрашивает логин/пароль, а опознавание происходит уже по куке.
Спасибо сказали: