Rostislav Опубликовано 10 марта, 2015 Поделиться Опубликовано 10 марта, 2015 (изменено) Всем доброго времени суток. Что Вы дальше прочтете, возможно заставит чувствовать злость и негодование ко мне, потому что сам чувствую что вопрос очень глупый, но все же решить его не могу, прошу Вас перебороть это чувство и помочь. Не буду описывать всю история, того как я пришел к проблеме. В общем у меня есть код: 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, код выполняется в модулях и т.д. Разбираться в этом всем нету желания. Подскажите пожалуйста, как сделать так, чтобы этот код работал, т.е. чтобы куки создавались до того, как идет проверка авторизации пользователя по кукам? Изменено 10 марта, 2015 пользователем Rostislav Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Bonfire Опубликовано 10 марта, 2015 Поделиться Опубликовано 10 марта, 2015 возможно заставит чувствовать злость и негодование ко мнеВовсе нет. На этом форуме, мало кто знает PHP на достаточном уровне. Вставлял его в шаблон форума с тегами куки создавались, пользователь становился авторизованным, но только через раз, или если много раз перегрузить страницу.Это во всех браузерах так? Или только в определённом? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Rostislav Опубликовано 10 марта, 2015 Автор Поделиться Опубликовано 10 марта, 2015 Это во всех браузерах так? Или только в определённом? Сейчас проверил в фаерфоксе, опере, гугл хроме, все одно и то же. Куки создаються, пользователь становиться авторизлванным через раз Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Rostislav Опубликовано 10 марта, 2015 Автор Поделиться Опубликовано 10 марта, 2015 Тему можно закрывать. Проблема в том, что 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 с авторизацией Viktar83 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
soka Опубликовано 10 марта, 2015 Поделиться Опубликовано 10 марта, 2015 Этот код полный п*здец. Кража ключей авторизации, sql инъекция, это только малая часть всех проблем. Автор, если не разбираетесь в безопасности не лезьте в таких вещах как авторизация пользователей. Учите для начала безопасность построения sql запросов. Sanshalay 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanshalay Опубликовано 10 марта, 2015 Поделиться Опубликовано 10 марта, 2015 Да ещё и вставлен этот код в обычный html шаблон... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Rostislav Опубликовано 11 марта, 2015 Автор Поделиться Опубликовано 11 марта, 2015 Этот код полный п*здец. Кража ключей авторизации, sql инъекция, это только малая часть всех проблем. Автор, если не разбираетесь в безопасности не лезьте в таких вещах как авторизация пользователей. Учите для начала безопасность построения sql запросов. Хорошо. Просветите пожалуйста, как сделать так, чтобы идея была реализованна безопасным способом? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
soka Опубликовано 11 марта, 2015 Поделиться Опубликовано 11 марта, 2015 Для начала вам нужно уяснить одну элементарную вещь - авторизация пользователя нужно проводить на основе достоверных и валидированых данных, и никогда не доверять данным поступающим от пользователя. В куках можно представиться кем угодно, ваша задача состоит в том, чтобы проверить действительно ли данный пользователь является Vasya а не только прикидывается им. Если сессионные данные пользователя в битриксе например хранятся в сессиях PHP, авторизацию (идентификацию) нужно проводить через массив $_SESSION, который пользователь подделать не может. Если сессия хранится в базе данных, как в IPB, на основе идентификатора сессии клиента запросить данные из БД. Все это, по хорошему, нужно делать хуками, например расширив класс сессий, а не в шаблоне. В IPB есть специальный класс ssoSessionExtension, который вызывается когда создается или обновляется новая сессия. Не использовать нативные запросы типа mysql_query, и тем более левые подключения через mysql_connect. Для этого есть специальный класс DB доступный через $this->DB. Не использовать нативные функции и переменные для работы с кукисами. В IPB кукисы могут иметь префиксы. Чтения и запись куков проводится через специальные методы IPSCookie::set, IPSCookie::get. Viktar83 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Rostislav Опубликовано 12 марта, 2015 Автор Поделиться Опубликовано 12 марта, 2015 В битриксе сессия существует в куках. В любом случаи нужно передавать в ipb какой пользователь(логин) сейчас авторизовался на сайте, и хочет быть авторизованным на форуме. На сколько я знаю, между поддоменами эта можно сделать только через куки... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
soka Опубликовано 12 марта, 2015 Поделиться Опубликовано 12 марта, 2015 В битриксе сессия существует в куках. У вас искаженное представление о работе сессий в целом. Ни в ИПБ, ни в битриксе, ни где либо еще сессии не хранятся в куках. Сессии хранятся на сервере. У клиента в кукисах находится только уникальный идентификатор по которому сервер определяет какая сессия ему принадлежит. Как правило это уникальный 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/ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.