forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   БД MySQL проверка данных (http://forum.boolean.name/showthread.php?t=20606)

L-ee-X 07.04.2017 10:09

БД MySQL проверка данных
 
Приветствую уважаемые.
Сразу скажу, что с БД ни когда дело не имел.
Собственно такой вопрос. К примеру пользователь зарегистрирован в программе, в бд находятся логин пароль и лиц ключ. При подключении, а именно ввода логина я хочу проверить существует ли данный пользователь в БД, далее если существует то поле лиц ключа нужно проверить в другой БД где занесены списки ключей зарегистрированных пользователей. Если данный ключ есть в базе то даём добро на вход в программу, если нет данного ключа то ошибка.
Можно ли это все организовать средствами самого клиента который подключается и БД на хостинге.
Или придётся ещё дополнительно для такой проверки, что организовывать?
Спасибо.

Nex 07.04.2017 10:54

Ответ: БД MySQL проверка данных
 
В случае с сайтами проверка и делается на стороне клиента в блоке php кода. Делается подключение к БД, запрос пользователей и проверка например input поля и данных из БД. В случае успешной проверки получаешь дополнительные данные.

L-ee-X 07.04.2017 11:56

Ответ: БД MySQL проверка данных
 
У меня ни сайт, программа которая получает данные с БД. Вот и хотел поинтересоваться, нужно ли сторонии фичи какие нибудь писать (скрипты php) или еще что то там(я не знаю), или достаточно запросами от клиента это все проверять?
То есть отослали запрос, на стороне сервера(MySQL) запустили некий скрипт который и будет выполнять данную проверку того чего я описал. Методом MySQL возможно это все организовать? Или придется дополнительно, что то писать, вкуривать и тд.

Nex 07.04.2017 12:21

Ответ: БД MySQL проверка данных
 
Лучше сделать сайт с php скриптом к которому обращается прога для безопасности и универсальности.
Так же можно сделать запрос прям к БД с сортировкой. Хз какой именно запрос нужен, что то типа WHERE input (поле в проге) == users (таблица в БД) и если БД вернет массив данных, то значит такой юзер есть. :-)

L-ee-X 07.04.2017 14:14

Ответ: БД MySQL проверка данных
 
Вот тоже думал для безопасности через php скрипт сделать.
Спасибо за советы.
Может еще кто, что посоветует :)

Phantom 08.04.2017 15:06

Ответ: БД MySQL проверка данных
 
Ну между базой и пользователем по-любому должен быть интерфейс какой-то. Если коннектиться напрямую к базе, то это у каждого пользователя будет потенциально полный доступ к твоей базе данных с возможностью изменять любые данные. И как ты пароль к базе ни прячь внутри своей проги, его по-любому кто-то найдёт и использует, будь уверен.

На самом деле реализуется это всё элементарно на том же PHP, буквально в 20 строк кода, а то и меньше.

L-ee-X 08.04.2017 22:14

Ответ: БД MySQL проверка данных
 
Ну то есть, мы делаем некий запрос к PHP скрипту который находится на серваке, а этот самый PHP скрипт делает обработку которую нужно, и отправляет данные клиенту который выполнял запрос. Верно я понимаю?
Про прямой доступ конечно это лажа, так как в самой программе придется прописывать и логины и пароли, конечно вероятность взлома стопроцентная. Про PHP скрипт тоже подумывал, реализовать запрос через него. Только пока с этим не особо дружу. Будем вкуривать. Благо интернет сейчас пестрит инфой. :)

St_AnGer 08.04.2017 22:30

Ответ: БД MySQL проверка данных
 
Цитата:

Сообщение от L-ee-X (Сообщение 313166)
Ну то есть, мы делаем некий запрос к PHP скрипту который находится на серваке, а этот самый PHP скрипт делает обработку которую нужно, и отправляет данные клиенту который выполнял запрос. Верно я понимаю?

Именно так. Только не забудь входящие переменные экранировать и вообще почитай про защиту в скриптах. А то элементарный запрос в переменной может уложить всю базу :-D я один раз напоролся на эту штуку (sql injection так называемый) - теперь очень осторожен с подставлением переменных в запрос :-D

Вот на вики статья на эту тему: тыц

Цитата:

Сообщение от L-ee-X (Сообщение 313166)
Только пока с этим не особо дружу. Будем вкуривать. Благо интернет сейчас пестрит инфой. :)

Пых вообще крайне элементарная штука, так что всё получится :)

mingw 15.04.2017 16:30

Ответ: БД MySQL проверка данных
 
Хорошим тоном считается не хранить логин и пароль пользователя. Вместо этого хранить хэш-ключ из логина+пароля+контрольная сумма

Randomize 16.04.2017 08:17

Ответ: БД MySQL проверка данных
 
Цитата:

Сообщение от mingw (Сообщение 313297)
Хорошим тоном считается не хранить логин

Нет. И про соль тоже фигня. Это всё было актуально когда работал md5 и все были довольны.
Криптостойкость алгоритма md5 уже давно была дискредитирована - он устарел. Что использовать вместо него? Bcrypt? Почти.

Тебе нужны эти функции:
http://php.net/manual/ru/function.password-verify.php
http://php.net/manual/ru/function.password-hash.php

Пример использования (в ответах смотрим):
http://stackoverflow.com/questions/2...assword-verify

Выбор актуального алгоритма хеширования с приемлемым соотношением цена/стойкость тут отдан на откуп разрабам php, так что можно расслабить булки и перестать изобретать хрень с солями и прочей фигнёй, которая, кстати, не особо спасает от коллизий.

Так же стоит отметить, что при работе с БД лучше использовать PDO с механизмом prepared statement: http://php.net/manual/ru/pdo.prepared-statements.php

Phantom 16.04.2017 15:38

Ответ: БД MySQL проверка данных
 
Randomize, так он даже не упоминал md5. А в password_hash можно было использовать соль до php7, судя по документации. В общем-то речи про алгоритм хэширования вообще не шло, лишь было сказано, что нужно это делать. Правда, я не понял, зачем хэшировать ещё и логин (вместо соли?) и контрольную сумму (чего? логина и пароля?).

Randomize 17.04.2017 00:51

Ответ: БД MySQL проверка данных
 
Цитата:

Сообщение от Phantom (Сообщение 313304)
Randomize, так он даже не упоминал md5. А в password_hash можно было использовать

Переопределять генерацию соли по умолчанию можно и щас:
PHP код:

password_hash($pwdPASSWORD_DEFAULT, ['salt' => function($sheet){
  return 
'охренительная соль';
}]); 

Рассказал про это выше только чтоб не делали по древним туторам с md5+salt.
Логин скорее не хешировать, а соль от него делать, ну идея нормальная, правда, опять же, мало смысла в этом - радужные таблицы.

L-ee-X 17.04.2017 16:50

Ответ: БД MySQL проверка данных
 
Всем спасибо за ответы. :)

L-ee-X 17.04.2017 17:15

Ответ: БД MySQL проверка данных
 
Еще такой вопрос. Хочу ограничить доступ к программе, чтоб под одним логином не смогли войти допустим два клиента, верно ли я понимаю что в бд нужно создать некую переменную и когда пользователь подключен она допустим меняется на единицу но перед подключением проверяет ее. Если она равна нулю то подключаемся, если нет то ошибка.

L-ee-X 17.04.2017 17:18

Ответ: БД MySQL проверка данных
 
Цитата:

Сообщение от mingw (Сообщение 313297)
Хорошим тоном считается не хранить логин и пароль пользователя. Вместо этого хранить хэш-ключ из логина+пароля+контрольная сумма

Про этот тон я знаю. Спасибо за совет.

Phantom 17.04.2017 17:33

Ответ: БД MySQL проверка данных
 
Придётся из программы постоянно отправлять запросы на сервер для удержания переменной в актуальном значении. Если сделать запрос только при старте и выключении программы, то 100% напорешься на ситуацию, когда у чувака прога завершилась фатально (электричество пропало, аккумулятор сел) и сервер не узнает, что программа была выключена. Получится мёртвая блокировка. Кроме того пользователь может подделать ответ твоего сервера и таким образом обойти ограничение - нужно это учитывать. Подписывать каждый запрос каким-то хитрым алгоритмом, использовать SSL.

В общем всегда нужно помнить о том, что любой ответ, пришедший с сервера в твою прогу может быть фейковым, подделанным злоумышленником, и наоборот, любой запрос, пришедший на сервер тоже может быть подделан. И с этим нужно как-то бороться.

L-ee-X 17.04.2017 17:51

Ответ: БД MySQL проверка данных
 
Мдааа. Столько проблем накапливается с этим SQL.

L-ee-X 17.04.2017 18:46

Ответ: БД MySQL проверка данных
 
Ну тут мне кажется как вариант шифровать пакеты которые отправляются с сервера и наоборот.
В любом случае без своего алгоритма шифрования не обойтись тут.

Randomize 17.04.2017 22:10

Ответ: БД MySQL проверка данных
 
Цитата:

Сообщение от L-ee-X (Сообщение 313324)
Еще такой вопрос. Хочу ограничить доступ к программе, чтоб под одним логином не смогли войти допустим два клиента

Нужен механизм сессий/сеансов. Это когда клиент получает при авторизации спецаильный временный токен (код), по которому сервер отличает одного клиента от другого. Клиент на своей стороне должен запоминать только этот токен. Он может храниться, например в cookie (очень простой способ с готовым решением) но в случае с софтом хранение этой cookie тебе придётся обеспечивать самостоятельно. То есть в каком-то смысле эмулировать бразуер, но это очень просто: код считал, сообщение составил, подписал, отослал. А ещё токен можно выдавать одноразовым на каждый запрос.

Цитата:

Сообщение от L-ee-X (Сообщение 313328)
Ну тут мне кажется как вариант шифровать пакеты которые отправляются с сервера и наоборот.
В любом случае без своего алгоритма шифрования не обойтись тут.

Как выше верно заметили написали, будет достаточно https для защиты от прослушки и компрометации данных. Обычно бд и php скрипт работают локально внутри серверного окружения, то есть, если общаться только с php, то всё безопасно - данные не перехватить. Но если очень хочется что-то пошифровать и тут есть решения: https://webformyself.com/shifrovanie...ytym-klyuchom/
Почти твоя ситуация - только адаптируй код. Изобретать свой алгоритм шифрования - Перельманом надо быть, всё-таки криптография это целое направление науки.

L-ee-X 18.04.2017 03:45

Ответ: БД MySQL проверка данных
 
Благодарю за объяснения :)
Я сейчас решил погрузиться глубже в этой сфере, так как в программу хочу еще добавить некий чат. Чтоб клиенты могли связываться друг с другом. Но сообщения нужно тоже шифровать.
После всех прочитанных рекомендаций выше думаю справлюсь :) Всем спасибо.
По результатам проделанной работы обязательно отпишусь :)

L-ee-X 23.03.2018 20:33

Ответ: БД MySQL проверка данных
 
Приветствую булочники. Подскажите, подключение к базе данных в программе нужно всегда? Или по мере запроса? Открыл соединение, сделал запрос, закрыл соединение. Или все же иметь постоянно соединение открытым?

Randomize 23.03.2018 20:42

Ответ: БД MySQL проверка данных
 
Нет смысла закрывать принудительно, само по завершении программы закроется.


Часовой пояс GMT +4, время: 15:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot