Перейти к содержанию

ipb, создание куков до проверки авторизации


Рекомендуемые сообщения

Всем доброго времени суток. Что Вы дальше прочтете, возможно заставит чувствовать злость и негодование ко мне, потому что сам чувствую что вопрос очень глупый, но все же решить его не могу, прошу Вас перебороть это чувство и помочь.

Не буду описывать всю история, того как я пришел к проблеме. В общем у меня есть код:
 

if($_COOKIE["BITRIX_SM_LOGIN"] != '' and $_COOKIE["pass_hash"] == "") {
   $dbh = mysql_connect("localhost", "***", "***") or die("Не могу соединиться с MySQL.");
   mysql_select_db("***") or die("Не могу подключиться к базе.");
   
   $res = mysql_query("SEL ECT `member_id`, `member_login_key` FR OM `members` WHERE `name` = '{$_COOKIE["BITRIX_SM_LOGIN"]}'");
   $my = mysql_fetch_array($res);
   if($my['member_id'] == ''){
      echo "Такого пользователя нету в базе данных";//Добавить его
   }
   else{
      setcookie( "pass_hash", $my["member_login_key"], time()+3600,"/");
      setcookie( "member_id", $my['member_id'], time()+3600,"/");
      session_name("session_id");
      session_start();
   }
}


 

Вставлял его в шаблон форума с тегами <php></php> куки создавались, пользователь становился авторизованным, но только через раз, или если много раз перегрузить страницу. Понимаю что это MVC, код выполняется в модулях и т.д. Разбираться в этом всем нету желания.


Подскажите пожалуйста, как сделать так, чтобы этот код работал, т.е. чтобы куки создавались до того, как идет проверка авторизации пользователя по кукам?

Изменено пользователем Rostislav
Ссылка на комментарий
Поделиться на другие сайты

возможно заставит чувствовать злость и негодование ко мне
Вовсе нет. На этом форуме, мало кто знает PHP на достаточном уровне.

 

Вставлял его в шаблон форума с тегами куки создавались, пользователь становился авторизованным, но только через раз, или если много раз перегрузить страницу.
Это во всех браузерах так? Или только в определённом?
Ссылка на комментарий
Поделиться на другие сайты

 

Это во всех браузерах так? Или только в определённом?

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

Тему можно закрывать.

Проблема в том, что ipb нужно самому создавать session_id.

 

Дописал:

setcookie( "session_id", "",time() - 3600); //Удаляем session_id в котором еще нету авторизации
setcookie( "pass_hash", $my["member_login_key"], time()+3600,"/");
setcookie( "member_id", $my['member_id'], time()+3600,"/");
header("Location: __forumpervoistok.b.infodesign.ru/"); //Обновляем страницу с моими куки, чтобы ipb создал session_id с авторизацией

Ссылка на комментарий
Поделиться на другие сайты

Этот код полный п*здец. Кража ключей авторизации, sql инъекция, это только малая часть всех проблем. Автор, если не разбираетесь в безопасности не лезьте в таких вещах как авторизация пользователей. Учите для начала безопасность построения sql запросов.

Ссылка на комментарий
Поделиться на другие сайты

Да ещё и вставлен этот код в обычный html шаблон...

Ссылка на комментарий
Поделиться на другие сайты

Этот код полный п*здец. Кража ключей авторизации, sql инъекция, это только малая часть всех проблем. Автор, если не разбираетесь в безопасности не лезьте в таких вещах как авторизация пользователей. Учите для начала безопасность построения sql запросов.

 

Хорошо. Просветите пожалуйста, как сделать так, чтобы идея была реализованна безопасным способом?

Ссылка на комментарий
Поделиться на другие сайты

Для начала вам нужно уяснить одну элементарную вещь - авторизация пользователя нужно проводить на основе достоверных и валидированых данных, и никогда не доверять данным поступающим от пользователя. В куках можно представиться кем угодно, ваша задача состоит в том, чтобы проверить действительно ли данный пользователь является Vasya а не только прикидывается им. Если сессионные данные пользователя в битриксе например хранятся в сессиях PHP, авторизацию (идентификацию) нужно проводить через массив $_SESSION, который пользователь подделать не может. Если сессия хранится в базе данных, как в IPB, на основе идентификатора сессии клиента запросить данные из БД.
Все это, по хорошему, нужно делать хуками, например расширив класс сессий, а не в шаблоне. В IPB есть специальный класс ssoSessionExtension, который вызывается когда создается или обновляется новая сессия.
Не использовать нативные запросы типа mysql_query, и тем более левые подключения через mysql_connect. Для этого есть специальный класс DB доступный через $this->DB.
Не использовать нативные функции и переменные для работы с кукисами. В IPB кукисы могут иметь префиксы. Чтения и запись куков проводится через специальные методы IPSCookie::set, IPSCookie::get.

Ссылка на комментарий
Поделиться на другие сайты

В битриксе сессия существует в куках.

 

В любом случаи нужно передавать в ipb какой пользователь(логин) сейчас авторизовался на сайте, и хочет быть авторизованным на форуме. На сколько я знаю, между поддоменами эта можно сделать только через куки...

Ссылка на комментарий
Поделиться на другие сайты

В битриксе сессия существует в куках.

У вас искаженное представление о работе сессий в целом. Ни в ИПБ, ни в битриксе, ни где либо еще сессии не хранятся в куках. Сессии хранятся на сервере. У клиента в кукисах находится только уникальный идентификатор по которому сервер определяет какая сессия ему принадлежит. Как правило это уникальный 32 символьный хэш md5.  Разница ипб лишь в том, что сессии он хранит в базе данных, и не использует встроенный механизм php ($_SESSION).

Имея идентификатор сессии, на основе него получаете сессионные данные текущего пользователя. Только по этим данным можно определить кто является текущем пользователем - Vasya Pukin или Guest который только представляется Васей Пукиным. Всем остальным данным поступающем от пользователя доверять не следует, ни логин, ни чему либо еще. В битриксе, на сколько я понял, используются стандартные сессии PHP, которые работают через глобальный массив $_SESSION. Если поддомены разные, кука которая содержит ид сессии сайта (по умолчанию это PHPSESSID) должна быть глобальной, чтобы на домене где установлен ипб php смог получить соответствующую сессию. Нужно либо капать настройки битрикса относительно кукисов, либо установить в нем session_set_cookie_params глобальный домен. 


__dev.1c-bitrix.ru/community/webdev/user/16002/blog/2112/

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...