X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Авторизация в CMS
heneration
heneration
Topic Starter сообщение 7.2.2013, 17:56; Ответить: heneration
Сообщение #1


Пишу свою CMS, небольшую для SEO целей. Пришло время делать авторизацию в админке. Примерно надумал как сделаю, но перед созданием хочу услышать Ваше мнение о таком методе:

Логин и пароль хранятся в базе данных в SHA1. Пароль при этом дополнительно подосолен строкой, которая генерируется при первом входе на главную страницу сайта (как только установили админку).

После того как в форму введены логин и пароль - они сразу же кодируются в SHA1. Затем с помощью SELECT делаем выборку всей таблицы с логинами и паролями, вытаскиваем найденные данные в массив и уже внутри цикла while сравниваем то, что было введено в форму, с данными из таблицы. - именно так решил сделать потому что не хочу введенные в форму данные вообще посылать в запросе, даже после эскайпов.

После этого планирую делать вот так:
session_start()
если пароль верен, то $_SESSION['admin']=1
иначе $_SESSION['admin']=0
все.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 7.2.2013, 18:08; Ответить: matroskin8
Сообщение #2


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

Вообще-то так никто не делает. Вытаскивать все записи из таблицы ради того, чтобы найти (или не найти) среди них одну возможную - это очень непрактично. Тем более это не практично, что в таблице лежит хешированый пароль, а потому его и фильтровать не нужно, поскольку сравниваться он будет с такой же хешированой строкой, не несущей никакой угрозы для БД, т.е. остается только профильтровать логин.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
heneration
heneration
Topic Starter сообщение 7.2.2013, 18:19; Ответить: heneration
Сообщение #3


Мне не критично и логин хранить в sha1. Непрактично вытаскивать таблицу потому что это дополнительная нагрузка? Дак она врядле будет такая большая при условии, что в таблице будет храниться всего лишь одна-две ну максимум три записи - больше админов врядле будет.


По поводу сессий, так как я планирую сделать одобряете или добавить/изменить что-то?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 7.2.2013, 18:36; Ответить: matroskin8
Сообщение #4


Ну так если хешируется еще и логин, то вообще беспокоиться нечего о целостности запроса, поскольку в хеше по определению ничего вредоносного быть не может. Хотя хешировать логин - это весьма уникальная и несколько сомнительная практика.

Непрактично вытаскивать таблицу потому что это дополнительная нагрузка?

Да, именно поэтому.

По поводу сессий, так как я планирую сделать одобряете или добавить/изменить что-то?

Я бы сделал немного иначе. При успешной авторизации создавал бы элемент сессии и присваивал бы ему в качестве значения логин пользователя - обычно его и выводят в качестве добавления к приветствию после авторизации - типа, Добро пожаловать, Администратор. Правда, логин-то у Вас будет необратимо зашифрован :) вот потому и сомнительная практика. Ну а если допущены ошибки при авторизации, то и не нужно ничего создавать в сессии. И проверка будет, соответственно, типа такой:
if($_SESSION['admin']){
// это для авторизованного пользователя
}else{
// пользователь не авторизован, а потому, к примеру, можно сделать редирект на форму авторизации
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
heneration
heneration
Topic Starter сообщение 7.2.2013, 19:22; Ответить: heneration
Сообщение #5


Ну так если хешируется еще и логин, то вообще беспокоиться нечего о целостности запроса, поскольку в хеше по определению ничего вредоносного быть не может.

Ну да, я для этого и планировал хэшировать.
обычно его и выводят в качестве добавления к приветствию после авторизации - типа, Добро пожаловать, Администратор.

Ну это больше эстетика, мне совсем не надо чтобы меня приветствовали.

Ну а если допущены ошибки при авторизации, то и не нужно ничего создавать в сессии.

Мне нужно открывать саму сессию вначале т.е. как только человек заходит в site.ru/admin , и вот почему: когда я захожу в админку, например: site.ru/admin, то файлу из папки admin, который называется reg.php, передается все, что вводится в строку браузера, например в папке admin лежит файл ,edit.php - но его нельзя открыть не авторизованному пользователю, потому что в reg.php стоит условие -если адрес !='admin' и $_SESSION['admin']!=1, то редиректить на admin - таким образом не авторизованный юзер не увидит файлы админки.

А по поводу того, что я пишу тому кто не прошел авторизацию: $_SESSION['admin']=0 - это просто инициализация переменной, чтобы не было ошибок. Или нафиг надо?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 7.2.2013, 19:49; Ответить: matroskin8
Сообщение #6


Мне нужно открывать саму сессию вначале

Сессия в самом начале всегда и открывается.

например в папке admin лежит файл ,edit.php - но его нельзя открыть не авторизованному пользователю

Ну так вынесите проверку в отдельный файл:
if(!$_SESSION['admin']){
// если не авторизован - редирект на форму авторизации
}

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

$_SESSION['admin']=0 - это просто инициализация переменной, чтобы не было ошибок. Или нафиг надо?

На корректно настроенных хостингах все предупреждения выключены. Даже показ ошибок зачастую отключен и они логируются. Но если все же так нужна щепетильность в скрипте, то можно проверять инициализирована ли переменная:
if(isset($_SESSION['admin']))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
heneration
heneration
Topic Starter сообщение 8.2.2013, 2:41; Ответить: heneration
Сообщение #7


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

Спасибо почитаю, никогда ранее не сталкивался с php, изучаю в процессе написания админки :)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Перенос сайта на CMS Wordpress
8 freeax 4986 10.3.2024, 14:58
автор: freeax
Открытая тема (нет новых ответов) Обновить сайт на CMS DLE
1 Sawich 1671 2.9.2023, 10:10
автор: WoWeb
Открытая тема (нет новых ответов) [Продам] базы сайтов на CMS Wordpress/Joomla/Drupal/Magento/...
14 phosphoruss 13781 16.8.2023, 15:27
автор: SmmPanelUS
Горячая тема (нет новых ответов) Сайт "под ключ" (дизайн, верстка, CMS)
32 Brans 16547 19.5.2023, 22:01
автор: Brans
Открытая тема (нет новых ответов) АПИ Таобао, 1688 для интеграции на сайты различных CMS
0 NittaSau 862 28.4.2023, 18:07
автор: NittaSau


 



RSS Текстовая версия Сейчас: 26.4.2024, 0:56
Дизайн