Перейти к содержимому

Сервис обмена электронных валют


Авторизация в CMS

#1 heneration

heneration
  • Пользователь
  • 6 сообщений
  • Репутация: 0
0

Отправлено 07 Февраль 2013 - 16:56

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

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

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

После этого планирую делать вот так:
session_start()
если пароль верен, то $_SESSION['admin']=1
иначе $_SESSION['admin']=0
все.

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 07 Февраль 2013 - 17:08

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

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


#3 heneration

heneration
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 07 Февраль 2013 - 17:19

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


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


  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 07 Февраль 2013 - 17:36

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

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

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

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

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

  • 0


#5 heneration

heneration
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 07 Февраль 2013 - 18:22

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

Ну да, я для этого и планировал хэшировать.

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

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

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

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

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

#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 07 Февраль 2013 - 18:49

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

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

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

Ну так вынесите проверку в отдельный файл:
if(!$_SESSION['admin']){
// если не авторизован - редирект на форму авторизации
}
а затем этот файл подключайте во все файлы, куда нужно запретить доступ неавторизованным юзерам.
Вот урок по авторизации - возможно, подойдет для понимания принципа авторизации. В уроке не используется БД, но сам алгоритм, быть может, пригодится.

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

На корректно настроенных хостингах все предупреждения выключены. Даже показ ошибок зачастую отключен и они логируются. Но если все же так нужна щепетильность в скрипте, то можно проверять инициализирована ли переменная:
if(isset($_SESSION['admin']))

  • 0


#7 heneration

heneration
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 08 Февраль 2013 - 01:41

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

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


Оформление форума – IPBSkins.ru