Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Теория разработки авторизации для сайта

Ответить
Настройки темы
Теория - Теория разработки авторизации для сайта

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток.
Никогда не разрабатывал движок для сайта с нуля, но очень хочется попрактиковаться и посверлить зубы через попу. Делать же на работе нефиг.

Прекрасно понимаю, что вся информация для авторизации на сайте хранится в таблицах в БД и извлекается оттуда при формировании запроса.
Сразу хочу оговорить, что такой "Заморочь" происходит с целью образовательной и хочется учесть максимальную степень безопасности, в частности:
-хранение логина и пароля происходит в разных таблицах
И тут у меня возникает трудность и появляется вопрос, в первую очередь, к людям, которые непосредственно работают в области разработки сайтов:
-"как это реализуете Вы"?
Т.е. я пришел к следующим умозаключениям:

1 - допустим, я храню "login" отдельно от "pwd" тогда у меня 2 таблицы: "tb_Users" с полями "id" и "login" \ "tb_Usr_data" с полями "id" и "pwd"
Впринципе, несложно понять, что по соответствующему id из одной таблицы можно найти соответствующий pwd из другой таблицы. И тут пропадает смысл хранения данных в 2-х таблицах, потому что если "злоумышленник" получает доступ к БД и открывает таблицу, то он может открыть вторую таблицу и найти соответствие. (о шифровании пароля я пока не говорю)

2 - второй момент. Запрос первично к таблицам происходит от "гостевого" пользователя в базу с целью прочесть требуемый логин и пароль, выходит, что у злоумышленника есть всегда доступ к прочтению данных из таблицы. Выходит, что обращение нужно всегда производить от имени уже введенного пользователя и при регистрации нового автоматически выполнять тригер или хранимую процедуру, разрешающую данному пользователю просмотр таблицы с паролями, с целью закрыть доступ для посторонних?
Но тут другой минус - с увеличением пользователей увеличивается шанс утечки информации от одного с его логином и вновь "злоумышленник" получает право на прочтение таблицы с паролями...

В общем, интересуюсь исключительно для самообразования, чтобы понимать как это работает. Большинство литературы пишется с целью "показать в общих чертах" и вопрос о безопасности не ставится вовсе. Либо просто пиарят тип данных "password" в СУБД и говорят, что этого достаточно и все хранят в одной таблице. Так ли это? Как вы реализуете? Не рекомендуйте использовать готовые среды разработки или движки типа "джумлы", "друпала" и т.д. если нужно, я конечно этим воспользуюсь, но, повторюсь, решил создать данную тему исключительно в самообразовательных целях.

Отправлено: 10:46, 25-07-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Volrath:
-хранение логина и пароля происходит в разных таблицах »
Чушь. Именно поэтому:
Цитата Volrath:
пропадает смысл хранения данных в 2-х таблицах, »
но не поэтому:
Цитата Volrath:
потому что если "злоумышленник" получает доступ к БД и »
А потому, что пара логин/пароль (точнее — хэш пароля, пароля там вообще не должно быть) в любом случае будет иметь функциональную зависимость.

Цитата Volrath:
Запрос первично к таблицам происходит от "гостевого" пользователя в базу с целью прочесть требуемый логин и пароль, »
С какого перепуга? Какие «гостевые пользователи»? Вы о чём? Запрос к базе делает Ваш http-сервер.

Отправлено: 17:49, 25-07-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для shisik

Ветеран


Сообщения: 3247
Благодарности: 596

Профиль | Отправить PM | Цитировать


Цитата Volrath:
если "злоумышленник" получает доступ к БД и открывает таблицу, то он может открыть вторую таблицу и найти соответствие »
То тогда хана вашему сайту в любом случае. Если злоумышленник получил доступ к БД, то он получил полный контроль над сайтом. Никакие пароли больше не нужны. Это как «если выстрелить в голову, то можно испоортить причёску». Не до причёски, знаете ли, будет...

Цитата Volrath:
Запрос первично к таблицам происходит от "гостевого" пользователя в базу с целью прочесть требуемый логин и пароль, выходит, что у злоумышленника есть всегда доступ к прочтению данных из таблицы. »
Нет. Пользователь вводит логин и пароль, скрипт хэширует пароль и посылает запрос к базе типа «дай мне запись с логином X и хэшем пароля Y». Если такой есть (в случае если логин/пароль правильные) - выполняется вход в систему, если нет - база вернёт пустой ответ и скрипт сообщит об ошибке (неправильный логин/пароль). Конечно, это не единственный вариант, но в любом случае данные из базы клиенту не отправляются и обрабатываются исключительно на серверной стороне. Так что «прочесть» пользователь ничего не сможет.

Отправлено: 18:12, 25-07-2017 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


в маленьких наколенных вэбсайтах пароль хэшируют, потому что инфраструктура неподконтрольна владельцу, и БД может слить младший техник ЦОДа

в серьёзных системах пароль хранится как есть на площадке с особым режимом доступа, а хэшируется/шифруется ещё на стороне клиента, чтобы опять же младший техник ЦОДа не мог узнать слишком много

Отправлено: 20:02, 25-07-2017 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


ОК. Про хэш я уже сказал - "опускаем" используем термин "пароль"
Из всего сказанного имеем:
таблица "Usr" с полями "log"\"pass"
html - страница с полями для ввода "log"\"pass" при нажатии кнопки "sign in" пытается запустить скрипт для проверки связки "log"\"pass"

вопрос: с какими правами этот скрипт обращается к БД?

Я к тому, что если делать запрос через тот же .php нужно усатновить сперва соединение с БД, чтобы проверить "есть ли в таблице 'Usr' хэш 'pass', где 'log' = введенный 'log' "
Если это так, то в скрипте указывается пользователь и пароль у которого есть права на чтение из таблицы "Usr".
Как результат возникает еще вопрос:
-"как защащают доступ из вне, чтобы потльзователь не получил доступ к скриптам"?
Например: можно попробовать скачать файл "www.mysite.net/scripts/signin.php"

Как это реализуется в "нормальных" движках?
Если закрыть доступ, то будут ли права на серевере у скриптов для обращения из папки \scripts\ в папку ..\sites\account.html?
Каким способом делается "отображение" скрытых элементов?
Например: вот страница index.html на ней поля для входа, когда прошел верификацию, то отображается та же самая страница, но отображено имя пользователя или информация для конкретного пользователя, или становятся доступными скрытые возможности для редактирования или еще чего-либо...?
Например, читаю данынй форум, могу отвечать, если выйти, то могу читать тот же форум, но ответ недоступен для меня. Какие способы? Не просто любые "как можно придумать", а "как это принято в нормальном промышленном смысле сайтостроения"

Последний раз редактировалось Volrath, 26-07-2017 в 11:43.


Отправлено: 11:28, 26-07-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Volrath:
вопрос: с какими правами этот скрипт обращается к БД? »
Ни с какими. Ибо не обращается к базе данных. Скрипт на клиенте общается с только с http-сервером, никакого доступа, ни логического, ни физического, к базе у него нет и быть не может. Всё его действо — сделать хэш и передать пару логин/хэш http-серверу. И уже сам сервер получив данные и проверив их валидность, обращается к базе данных примерно так, как это было выше описано коллегой.

Volrath, у Вас не возникало неодолимого желания взять любой известный открытый движок — даже не CMS, а банального форума, того же PunBB или phpBB — и просто посмотреть, как там сие реализовано, а?

Отправлено: 12:06, 26-07-2017 | #6


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо, конечно, погляжу, но еще один вопрос:

-"получается, мы устанавливаем сессию,
потом при вводе логина\пароля запускаем (например) .php и передаем ему параметры логин\пароль,
в результате скрипт нам выдает страницу либо нужную, либо информативную об ошибке"?

блеать, но если все так, то в любом случае файл .php должен устанавливать соединение с БД! значит можно его попробовать качнуть и найти параметры подключения.
-"как с этим борятся обычно?"

Отправлено: 12:56, 26-07-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Попробуйте. Качните. А потом таки сделайте то, на что я Вам намекаю.

Отправлено: 13:38, 26-07-2017 | #8


Аватара для shisik

Ветеран


Сообщения: 3247
Благодарности: 596

Профиль | Отправить PM | Цитировать


Цитата Volrath:
Я к тому, что если делать запрос через тот же .php нужно усатновить сперва соединение с БД, чтобы проверить "есть ли в таблице 'Usr' хэш 'pass', где 'log' = введенный 'log' "
Если это так, то в скрипте указывается пользователь и пароль у которого есть права на чтение из таблицы "Usr". »
Совершенн оверно. Серверные скрипты устанавливают соединение с БД, используя логин и пароль пользователя этой базы (не путать с учётками на сайте). Права у этого пользователя могут быть разными, но как минимум они позволяют выполнять запросы SELECT, UPDATE, INSERT и DELETE, то есть серверные скрипты имеют возможность не только получать, но и изменять данные в базе.

Опасно ли это? Нет, не опасно. Если только скрипты не позволяют кому угодно выполнять произвольные запросы. Ну то есть допустим у нас есть скрипт login.php, котооые при POST запросе к нему извлекает аргументы login и pasword, санитизирует их (в смысле экранирует управляющие символы, исключая возможность вставить произвольный SQL код в запрос), после чего выполняет SQL запрос и формирует ответ. Если логин или пароль не указан - перенаправляет на страницу логина с сообщение о неполных данных. При этом никакие данные из базы клиенту не отправляются.

Цитата Volrath:
-"как защащают доступ из вне, чтобы потльзователь не получил доступ к скриптам"?
Например: можно попробовать скачать файл "www.mysite.net/scripts/signin.php" »
Как его можно скачать? При обращении по этому адресу скрипт будет выполнен и выдаст ошибку, т.к. запрос некорректен.

Отправлено: 17:20, 26-07-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Теория разработки авторизации для сайта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Bentley и Vertu заключают партнёрство для разработки смартфонов OSZone News Новости информационных технологий 0 08-07-2014 02:30
C/C++ - Подскажите среду разработки для symbian 9.4 tier_skg Программирование и базы данных 1 28-11-2011 17:01
Теория: CGI-скрипты для рассылки спама M1sha Хочу все знать 4 20-05-2010 23:23
*Теория* | Классы C++ для представления winapi32 pva Программирование и базы данных 5 11-04-2005 11:28
*Теория* | Определите несколько формул для Pascal MaxxSoftware Программирование и базы данных 2 23-02-2005 19:56




 
Переход