подскажите начинающему php-программисту

Vladimir Smagin 21h на blindage.org
Чт Авг 5 18:36:02 BST 2010


хеши обычно хранить смысла нет. юзеры будут делать пароли типа 123 или 
йцукен. как не крути, а БУДУТ. даже если ты говнокодер и самсебеадмин и 
базу твоего сайтика сольют в первый же день, то мд5 все равно очень 
быстро сломается по причине лени самого юзера. практика показывает, что 
сами сайты ломают редко. все пароли добываются обычными троянами, 
уловками и тупым перебором паролей. но даже если ты захочешь хранить 
хеши, то crypt умеет делать и пхп, и сам мускуль. при регистрации 
получил от юзера пароль, получил его хеш и записал в базу этот хеш. при 
авторизации опять получаешь пароль, берешь от него хеш и сравниваешь с 
хешем из базы данных. все элементарно и просто.

теперь о базе данных. данные пользователей хранятся в таблицах 
пользователей. если есть группы пользователей, то должна быть таблица 
групп. если пользователь имеет доступ к нескольким группам, то должна 
быть и таблица связи пользователь-группа (например, группа юзеров 
"новости" имеет доступ только к новостям и группа юзеров "закачки" имеет 
доступ только к закачкам. а админ имеет доступ к обоим разделам, поэтому 
он сразу в 2 группах).

например:

таблица "пользователи"
- идентификатор_пользователя (ПК, ЧИСЛО)
- имя_пользователя (СТРОКА)
- емыло (СТРОКА)
- пароль (СТРОКА) <-- тут решать тебе хранить открытый пароль или хеш

таблица "группы" (довольно грубо и просто. при желании можно улучшить 
структуру)
- идентификатор_группы (ПК, ЧИСЛО)
- группа_по_умолчанию (БУЛЬ) <-- например, группа анонимуса
- право_чтение_записей_новостей (БУЛЬ)
- право_чтение_записей_закачек (БУЛЬ)
- право_запись_новости (БУЛЬ)
- право_запись_закачки (БУЛЬ)

таблица "группа_пользователь"
- идентификатор_пользователя (ПК, ЧИСЛО)
- идентификатор_группы (ПК, ЧИСЛО)

таблица групп это простой граф, определяющий что может делать группа, а 
что нет. например, можно создать 2 группы: анонимус и юзер. анонимусы 
могут только читать, но не могут писать. юзеры могут и то, и другое.

On 08/05/2010 10:44 PM, std_out wrote:
> Hi all !
> Пришло время делать в моем веб-приложеньице раздельный доступ для разных
> категорий пользователей.
> Посоветуйте, как организовать авторизацию.
> Не в смысле, что там кукисы-сессии, а где и в каком виде наиболее
> удобно/безопасно хранить пароли.
> Т.е. хранить наверное все-таки в базе данных приложения (в моем случае
> MySQL), а вот в какой форме - вопрос ...
> В виде простого текста наверное будет неправильно, видимо надо их
> как-нибудь шифровать/расшифровывать.
> Писать свою процедуру шифрования-расшифровки, думаю, несеръезно.
> Как это обычно делается ?
>
>
>    




Подробная информация о списке рассылки ubuntu-ru