Как правильно использовать аутентификацию, сессии, базу для защиты адм части

maxim

Новичок
Как правильно использовать аутентификацию, сессии, базу для защиты адм части

Проект:
Есть 2 области проекта User'ская(пока без логина и пароля) и
Admin'ская(т.е с логином и паролем). Логин, пароль и ID юзера храню в базе.
Из формы передается элемент идентификации и аутентификации,
сверяется по базе, и присваивется permission(user | admin).

Проблема:
Если зарегистрировать в сессии массив auth() с элементами
auth[username], auth[userid] (, или переменные auth_username, auth_userid), и
на закрытых страницах смотреть хватает ли у auth[username] прав для
просмотра этой страницы, то какой-нибудь злодей может сформировать
строку запроса содержащую ....&auth_username=admin&auth_userid=1..,
а также HTTP_REFERER=mydomen/mypage
, обманув таким образом всю мою нехитрую защиту.

Задача:
Как используя аутентификацию, сессии, базу обеспечить защиту админской
части и передачу данных о том, что данный человек админ от
страницы к странице.
 

Zh0rzh

Новичок
Во первых, храни в сесси логин, и пароль в хэше.
Во вторых используй массив $_SESSION,

тогда злоумышленник не сможет подменить твои переменные GET/POST методом
 

lovchy

nacido para cifrar
Если зарегистрировать в __сессии __ массив auth() с элементами
auth[username], auth[userid] (, или переменные auth_username, auth_userid), и
на закрытых страницах смотреть хватает ли у auth[username] прав для
просмотра этой страницы, то какой-нибудь злодей __может сформировать__
строку запроса содержащую ....&auth_username=admin&auth_userid=1..,
а также HTTP_REFERER=mydomen/mypage
Внимание, вопрос: как можно через GET/POST и REFERER подменить значение в сессии?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: Как правильно использовать аутентификацию, сессии, базу для защиты адм части

Автор оригинала: maxim
Проблема:
Если зарегистрировать в сессии массив auth() с элементами
auth[username], auth[userid] (, или переменные auth_username, auth_userid), и
на закрытых страницах смотреть хватает ли у auth[username] прав для
просмотра этой страницы, то какой-нибудь злодей может сформировать
строку запроса содержащую ....&auth_username=admin&auth_userid=1..,
а также HTTP_REFERER=mydomen/mypage
Проблема несколько надуманная, даже если не использовать $HTTP_SESSION_VARS / $_SESSION, а использовать register_globals, то сессионные переменные всё равно затрут переменные из GET-запроса. Проблема может возникнуть если сессионных переменных ещё нету, но этот момент всё равно проверять надо:
PHP:
if (!session_is_registered('auth')) {
    $auth = array();
    session_register('auth');
}
на REFERER действительно полагаться не стоит.
 

SA739

Cogito, ergo sum
Можно использовать стандартную апачевскую авторизацию
(если не много пользователей/админов)
.htaccess
AuthType Basic
AuthName "By owner's only"
AuthUserFile /usr/local/www/data/.htpasswd
require valid-user

а затем проверять $_SERVER['REMOTE_USER']
 

maxim

Новичок
Re: Re: Как правильно использовать аутентификацию, сессии, базу для защиты адм части

Автор оригинала: Sad Spirit
Проблема несколько надуманная, даже если не использовать $HTTP_SESSION_VARS / $_SESSION, а использовать register_globals, то сессионные переменные всё равно затрут переменные из GET-запроса. Проблема может возникнуть если сессионных переменных ещё нету, но этот момент всё равно проверять надо:
PHP:
if (!session_is_registered('auth')) {
    $auth = array();
    session_register('auth');
}
на REFERER действительно полагаться не стоит.
Т.е. злодею бесполезно втыкать в строку запроса всякие там переменные, которые уже зарегистрированы. В программе значения этих переменных все равно будут браться из сессии.
Вы конечно меня обрадовали.
Тогда следующий вопрос:"В каких случаях переменные сессии главнее (если можно так сказать) переменных пост".
 

RomikChef

Guest
Во всех, кроме случаев, когда ламернутый программер или пьяный админ не сменили настройки сервера
по умолчанию.

но в этом случае затирание переменных сессии гетом - самое меньшее иззол.
 

maxim

Новичок
Автор оригинала: RomikChef
Во всех, кроме случаев, когда ламернутый программер или пьяный админ не сменили настройки сервера
по умолчанию.

но в этом случае затирание переменных сессии гетом - самое меньшее иззол.
А что такое может быть?
А какие настройки надо изменить чтобы переменные гет затирали переменные сессии.
 

tony2001

TeaM PHPClub
Warning: не делать так ни в коем случае
можно поменять порядок variables_order в php.ini
 

maxim

Новичок
Великое спасибо ВСЕМ!!! Думаю тема закрыта. А сейчас пора спать :).
 
Сверху