Простой способ защиты пользовательских данных

в 0:08, , рубрики: php, авторизация, метки: ,

Сейчас я делаю свой небольшой сайт и у меня возникла вот такая идея. В моей базе данных хранятся такие пользовательские данные как логин, пароль и код уровня доступа (1 — администратор, 2 — модератор, 3 — обычный пользователь). Если кто-то получит доступ к моей таблице и изменит код доступа на «1» то он автоматически станет админом. Это не хорошо.

Поэтому я решил ввести новую запись — ключ. Ключ создаётся по такой схеме md5(Соль + Пароль(не хэш) + Ранг). Зачем нужна Соль? Чтобы скрыть способ шифрования — иначе злоумышленник может сам сделать свой хэш, а так может только мой скрипт. При каждом логине пользователя я сверяю два ключа — тот который создан по введеному паролю и тот который хранится в БД. Если ключи не совпадают (sql-инъекцией злоумышленник изменил себе ранг) скрипт не даёт авторизоваться, хотя логин и пароль введены правильно. Можно добавить в ключ другие важные данные — е-майл, номер телефона и т.п.

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

Конечно можно просто при создании хэша пароля добавлять в него важные данные. Кажется почему бы и нет? Но тогда я могу просто поменять себе ранг, восстановить пароль (хэши теперь не совпадают), и вуаля — я админ!

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

Возможно моя маленькая идея кому-нибудь пригодятся, и мир хоть чуточку станет безопасней :)

Автор: Murloc

* - обязательные к заполнению поля