Russian Qt Forum
Ноябрь 23, 2024, 15:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Авторизация на сервере  (Прочитано 6057 раз)
Trademaster
Гость
« : Сентябрь 27, 2013, 19:48 »

Ребят ,я создал самую простую модель клиент - сервер. Но нужно сделать так ,что бы клиент мог подключиться к серверу только если передаст ему правильный логин и пароль. Не подскажете как?
P.S сервер реализован с помощью QTcpServer
Записан
Bepec
Гость
« Ответ #1 : Сентябрь 27, 2013, 20:21 »

Неправильная постановка вопроса.

Вопрос - как сделать так, чтобы сервер обрывал соединение после передачи неправильного логина/пароля.

Ответ - обрывать соединение.

Разобьём на этапы.
1) клиент создаёт подключение к серверу. Сервер ждёт.
2) клиент передаёт пару логин/пароль. Сервер или убивает соединение, или оставляет, или если клиент не передал в установленный промежуток пару логин/пароль, убивает.
3) происходит общение сервера с клиентом, или же клиент отпочковывается.

PS м?
Записан
Trademaster
Гость
« Ответ #2 : Сентябрь 28, 2013, 09:06 »

Как кодом проверить ,правильный ли передан логин \ пароль???
Записан
Bepec
Гость
« Ответ #3 : Сентябрь 28, 2013, 09:19 »

Специально по пунктам разбил.
Ещё упрощу.

Соединение клиента с сервером создаётся в любом случае. После чего по этому каналу начинается обмен. Протокол обмена идёт на вашей совести - шифрование, условные команды и прочее. Обычно используется схема запрос-ответ.

Клиент соединяется с сервером. (приняли соединение, подключили к сигналу)
Сервер запрашивает логин пароль, варианты:
1) клиент отвечает, сервер проверяет if (name == incomingName && password == incomingPassword);
2) клиент не отвечает, сервер перезапрашивает данные ещё 3-4 раза, после неответа убивает соединение.
3) клиент отвечает неправильно, сервер перезапрашивает и так до превышения количества неверного ввода пароля.

PS всё ещё непонятно?
Записан
Trademaster
Гость
« Ответ #4 : Сентябрь 28, 2013, 09:36 »

Специально по пунктам разбил.
Ещё упрощу.

Соединение клиента с сервером создаётся в любом случае. После чего по этому каналу начинается обмен. Протокол обмена идёт на вашей совести - шифрование, условные команды и прочее. Обычно используется схема запрос-ответ.

Клиент соединяется с сервером. (приняли соединение, подключили к сигналу)
Сервер запрашивает логин пароль, варианты:
1) клиент отвечает, сервер проверяет if (name == incomingName && password == incomingPassword);
2) клиент не отвечает, сервер перезапрашивает данные ещё 3-4 раза, после неответа убивает соединение.
3) клиент отвечает неправильно, сервер перезапрашивает и так до превышения количества неверного ввода пароля.

PS всё ещё непонятно?



Я с первого раза все понял ,но я не знаю как именно КОДОМсделать так ,что бы клиент передал значение пароля и логина в переменные сервера ,что бы он их проверил...
Записан
Bepec
Гость
« Ответ #5 : Сентябрь 28, 2013, 10:10 »

Код:
int identificationNumber = 1;
QString name;
QString password;

Код:
QByteArray array;
array.append(identificationNumber);
array.append(name.toUtf8());
array.append(password.toUtf8());
tcpClientSocket.write(array);

PS набросал в браузере. По хорошему надо DataStream использовать.

PPS вы сумели написать клиент-серверное приложение и ни разу не пытались что-то передать серверу от клиента и обратно?
Записан
mutineer
Гость
« Ответ #6 : Сентябрь 28, 2013, 11:13 »

Я с первого раза все понял ,но я не знаю как именно КОДОМсделать так ,что бы клиент передал значение пароля и логина в переменные сервера ,что бы он их проверил...

Точно так же, как клиент будет передавать любые другие данные серверу
Записан
Trademaster
Гость
« Ответ #7 : Сентябрь 28, 2013, 23:04 »

Все отлично ,теперь научил свою программу сообщать серверу логин и пароль ,а сервер различать ,верный логин и пароль или нет.
теперь другой вопрос. нужно это как-то обезопасить. У кого какие советы будут?
Записан
mutineer
Гость
« Ответ #8 : Сентябрь 28, 2013, 23:50 »

Обезопасить от чего? От уведения базы паролей? От перехвата трафика? От перебора паролей?
Записан
Bepec
Гость
« Ответ #9 : Сентябрь 29, 2013, 07:57 »

Скорее его перехват интересует Веселый Если он сделал так, как я написал, у него открытым текстом идёт пароль / логин.

Ну я знаю только понаслышке. Самое простое - посылать не пароль, а хеш пароля с солью. Ну или использовать https например.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #10 : Сентябрь 29, 2013, 13:54 »

Скорее его перехват интересует Веселый Если он сделал так, как я написал, у него открытым текстом идёт пароль / логин.

Ну я знаю только понаслышке. Самое простое - посылать не пароль, а хеш пароля с солью. Ну или использовать https например.
Верно, есть известный протокол аутентификации - Challenge-Handshake Authentication Protocol (CHAP). При установлении соединения с клиентом, сервером сервер генерирует salt и предает клиенту. Тот вычисляет хэш (md5) пароля и отправляет обратно. Сервер тоже вычисляет хэш и сравнивает.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.