Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пользователи и привилегии для доступа из web
 
 автор: Prihod   (11.06.2007 в 22:39)   письмо автору
 
 

Хотелось бы узнать как лучше организовать безопасность web сайта т.е
Имеется сайт с информацией доступ к которой могут иметь 3 группы пользователей с определенными правами АДМИН , МОДЕРАТОР И ОБЫЧНЫЙ ПОЛЬЗОВАТЕЛЬ
Админ может создавать , удалять и редактировать всю информацию на сайте , модератор к примеру редактировать таблицу BOOKS , а обычный пользователь только просматривать содержимое таблицы BOOKS так вот как лучше организовать доступ к данным :

Способ №1
пользователь проходит авторизацию мы определим его статус (админ, модератор или user)
храним в сесийных переменных его login и password считываем эти значения в каждом скрипте званого определяем значения статуса для этого пользователя и в зависимости от этого значения разрешаем те или иные действия.

Способ №2
При регистрации пользователя (админ, модератор) создаем в базе для него привилегии
К примеру для модератора
<?php
$password =md5($password);
SQL=”grant select, insert, update,on books.* to bookorama identified by '”.$password.”';”
?>
Потом при загрузки крипта присваиваем сессийным переменным значения login и password
И используем их при подсоединении к базе данных
<?
mysql_connect($host_name, $ login, $ и password);
?>
В Общем у меня вопрос как это лучше и правильно сделать ?

   
 
 автор: mr Bin   (11.06.2007 в 23:57)   письмо автору
 
   для: Prihod   (11.06.2007 в 22:39)
 

Первый способ корректен. В бд у пользователя в одном поле должно быть указано, какой статус он имеет. Не знаю на сколько это праивльно, но я именно так и делал, всё устраивает.

   
 
 автор: Trianon   (12.06.2007 в 01:13)   письмо автору
 
   для: Prihod   (11.06.2007 в 22:39)
 

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

Можно, конечно, подстраховаться, и заведя 4 пользователя MySQL (одного для аутентификации и трех других для исполнения действий трех групп пользователей) испускать запросы только в собственных рамках. Но при этом контроль за авторизацией и правами всё равно придется возложить на скрипт. В общем случае число пользователей будет определяться числом групп с различными полномочиями. В MSSQL и Oracle существует сущность Role (очень похожая на группу), в MySQL её придется эмулировать через соотв. пользователя.

но даже при N1 есть замечания.

>пользователь проходит авторизацию мы определим его статус (админ, модератор или user)
храним в сесийных переменных его login и password считываем эти значения в каждом скрипте званого определяем значения статуса для этого пользователя и в зависимости от этого значения разрешаем те или иные действия.

Зачем в сессии хранить login и password пользователя портала?
login и password участвуют в процессе аутентификации, а её пользователь вроде как прошел.
Может лучше хранить идентификатор пользователя и данные user_agent и remote_addr?

   
 
 автор: Proger   (12.06.2007 в 12:23)   письмо автору
 
   для: Trianon   (12.06.2007 в 01:13)
 

Интересное замечание говоришь! Но я не понимаю все крупные, да и не очень движки форумов, cms хранят оные данные в сессии! Разве так страшно забивать сессию лишней инфой? Тем более зачем нам его User-Agent и Remote _addr может понадобиться?! Не очень понял.

   
 
 автор: Unkind   (12.06.2007 в 12:34)   письмо автору
 
   для: Proger   (12.06.2007 в 12:23)
 

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

Тем более зачем нам его User-Agent и Remote _addr может понадобиться?!
Если SID перехватит другой человек, то можно сверить его IP/User-Agent и не дать доступ к аккаунту.

   
 
 автор: hammet   (12.06.2007 в 13:04)   письмо автору
 
   для: Unkind   (12.06.2007 в 12:34)
 

User-Agent и Remote _addr нужен для антиспуфинга.
В БД можно создать таблицу например id, AdminName, AdminPass, AccessLevel
И в поле AccessLevel хранить уровень доступа 0,1,2,3...как сами пожелаете...
при авторизации записываем в $_SESSION['AccessLevel'] значение этого поля.
В скрипты включаем проверку. Если уровень не ниже 2, то .....и т.д.
Это как вариант :)

   
 
 автор: Trianon   (12.06.2007 в 14:36)   письмо автору
 
   для: Proger   (12.06.2007 в 12:23)
 

>Интересное замечание говоришь! Но я не понимаю все крупные, да и не очень движки форумов, cms хранят оные данные в сессии!

Верится с трудом.
Зачем?

Разве так страшно забивать сессию лишней инфой?
Зачем?

Тем более зачем нам его User-Agent и Remote _addr может понадобиться?! Не очень понял.
В случае перехвата SID (случайного или намеренного) и попытки выдать запрос от имени другого пользователя, сравнение этих параметров поможет отклонить неаутентифицированный запрос.

   
 
 автор: Proger   (12.06.2007 в 15:52)   письмо автору
 
   для: Trianon   (12.06.2007 в 14:36)
 

Ах вот оно что! Но в случае перехвата sid, проще сравнить sid, который лично у меня это имя юзера + пароль + индефикатор всё перемешанное md5 * 75 и его (в моем случае наверное) легче сравнить с таким же sid, который скрипт спокойно может сам сформировать из сессии =)

   
 
 автор: Unkind   (12.06.2007 в 15:54)   письмо автору
 
   для: Proger   (12.06.2007 в 15:52)
 

Что Вы сейчас сказали?

   
 
 автор: Proger   (12.06.2007 в 16:03)   письмо автору
 
   для: Unkind   (12.06.2007 в 15:54)
 

Мда.... прочитал сам ;) Красиво сказал, а кнопка "редактироватЬ" не показываеца - сволачь такая :(

   
 
 автор: kasmanaft   (12.06.2007 в 16:08)   письмо автору
 
   для: Proger   (12.06.2007 в 16:03)
 

Эх, а я б цитату вставил :D

зыж
http://softtime.ru/forum/editpostform.php?id_forum=1&id_post=223809&id_theme=38944

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования