Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532

Условие "Вошедший пользователь". Улучшить безопасность

08.07.2013, 15:39. Показов 1670. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. После того как пользователь вошел на сайт я запускаю куки или сессию(зависит от того что он выбирает) и затем постоянно (на каждой странице) делаю проверку на вход
PHP
1
2
3
4
5
6
7
8
if ((isset($_COOKIE['email']) and isset($_COOKIE['password'])) or (isset($_SESSION['password']) and isset($_SESSION['email'])))
{
    $login=1;
}
else
{
    $login=0;
}
Как можно улучшить эту проверку с точки зрения безопасности и какие подводный камни существуют? Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2013, 15:39
Ответы с готовыми решениями:

Ошибка. Текущий вошедший пользователь не обладает правами администратора
День добрый! На моём компьютере всего один пользователь и устанавливался винд для одной учётной записи. Но когда ввожу takeown /f...

Как в SQL Server определить роль, к которой принадлежит вошедший пользователь
подскажите как в sql server определить роль к которой принадлежит вошедший пользователь

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

25
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
08.07.2013, 18:27
Цитата Сообщение от SanychBY Посмотреть сообщение
PHP
1
(isset($_COOKIE['email']) and isset($_COOKIE['password'])) or ...
Я сам себе могу повесить куку с именем email и куку с именем password и твой сайт меня залогинет
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
08.07.2013, 18:41  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Я сам себе могу повесить куку с именем email и куку с именем password и твой сайт меня залогинет
И как этого избежать?
Цитата Сообщение от SanychBY Посмотреть сообщение
Как можно улучшить эту проверку с точки зрения безопасности и какие подводный камни существуют?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
08.07.2013, 18:44
Не логинить тех, кто себе повесил любую куку с именами email и password.
p.s.
Цитата Сообщение от SanychBY Посмотреть сообщение
я запускаю куки или сессию(зависит от того что он выбирае
Зачем вообще юзеру выбор как хранить данные о его логине, работай с сессией всегда?
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
08.07.2013, 18:47  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Зачем вообще юзеру выбор как хранить данные о его логине, работайте с сессией всегда?
Сессия хранится только на время сеанса, а куки на указанное время. Я даю выбрать пользователю оставаться в системе сайта всегда или только на сеанс(поправьте меня если я не прав)
Цитата Сообщение от crautcher Посмотреть сообщение
Не логинить тех, кто себе повесил любую куку с именами email и password.
И как проверить любая эта кука или не любая. Спасибо.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
08.07.2013, 18:56
Цитата Сообщение от SanychBY Посмотреть сообщение
Сессия хранится только на время сеанса, а куки на указанное время.
Кто вам такую чушь сказал?

Добавлено через 1 минуту
Сессия такаяже кука как и любая другая.
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
08.07.2013, 18:58  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Кто вам такую чушь сказал?
Не знаю=)
А как тогда и в чем разница?

Добавлено через 58 секунд
Цитата Сообщение от crautcher Посмотреть сообщение
Сессия такаяже кука как и любая другая
И как тогда указать сколько времени ей "жить".?

Добавлено через 56 секунд
PHP
1
setcookie("email", $email, time()+9999999);
PHP
1
 $_SESSION['email']=$email;
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
08.07.2013, 19:00
Цитата Сообщение от SanychBY Посмотреть сообщение
А как тогда и в чем разница?
В том что в куках данные у клиента в браузере и он может их менять как угодно, а в сессии данные на сервере, а у юзера только индикатор сессии - билеберда. Сессия - защищена, куки нет.
Цитата Сообщение от SanychBY Посмотреть сообщение
И как тогда указать сколько времени ей "жить".?
http://php.net/manual/ru/funct... params.php
п.с. ухожу домой
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
08.07.2013, 19:04  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
В том что в куках данные у клиента в браузере и он может их менять как угодно, а в сессии данные на сервере, а у юзера только индикатор сессии - билеберда. Сессия - защищена, куки нет.
Зачем тогда вообще использовать куки?
0
44 / 26 / 4
Регистрация: 22.06.2011
Сообщений: 123
12.07.2013, 13:11
Цитата Сообщение от SanychBY Посмотреть сообщение
Зачем тогда вообще использовать куки?
Для хранения данных о пользователе. Например, определенный вид сортировки, которую обычно выбирает пользователь, тема на сайте и тому подобное. Это все - некритичные данные, в отличии от пользователя и пароля.
Пароль можете хранить и в куках, но тогда шифруйте его и делаете проверку в php.
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
12.07.2013, 13:14  [ТС]
Цитата Сообщение от AxelPAL Посмотреть сообщение
Для хранения данных о пользователе. Например, определенный вид сортировки, которую обычно выбирает пользователь, тема на сайте и тому подобное. Это все - некритичные данные, в отличии от пользователя и пароля.
Пароль можете хранить и в куках, но тогда шифруйте его и делаете проверку в php.
Ну а кроме использования кук или сессии, как это условие можно улучшить?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
12.07.2013, 13:31
Цитата Сообщение от SanychBY Посмотреть сообщение
как это условие можно улучшить?
О каком условии идет речь?
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
12.07.2013, 13:49  [ТС]
PHP
1
if ((isset($_COOKIE['email']) and isset($_COOKIE['password'])) or (isset($_SESSION['password']) and isset($_SESSION['email'])))
Да вроде пока об этом=)
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
12.07.2013, 14:27
Чуть дополню, если позволите. HTTP -- stateless протокол, т.е. пришел запрос, сервер его обработал, и забыл о клиенте. Да, в версии 1.1 (ну и неофициально в 1.0 тоже вроде как) появились постоянные соединения (keep-alive), но дизайна протокола эта штуковина не изменила, она служит совершенно в других целях. Поэтому, без каких-либо "извращений", сразу после авторизации сервер забудет о том, что Вы зашли на сайт, где побывали, что видели, кому что отправляли и так далее. Поэтому был введен механизм cookies: он позволяет поддерживать состояние. Суть его заключается в простом принципе: когда пользователь входит на сайт (или даже с самого начала посещения сайта), сервер отправляет ему сверхсекретную длинную комбинацию буковок, и запоминает, что с этой комбинацией связан такой-то пользователь. А значит, что когда он войдет, сервер это запомнит, и выдаст новую страницу, в которой он уже учтет то, что пользователь "зашел" на сайт.
В пхп нативно поддерживается механизм сессий (google: session_start, $_SESSION). С его помощью автоматически создается эта секретная строка, автоматически отдается в заголовке Set-Cookie, и автоматически запоминается на сервере. А в конечном итоге, программист сервера (т.е. Вы) получает в свое распоряжение т.н. суперглобальный массив $_SESSION, куда можно засовывать данные, связанные с конкретным клиентом. Таким образом, отпадает необходимость в ручной манипуляции с самими cookies, эта работа за вас уже сделана.
По поводу безопасности, в вашем коде она отсутствует, более того, выражение (A and B) or (B and A) эквивалентно (A and B). Поэтому вторая часть выражения явно лишняя, в вашей проверке.
В действительности, как уже упоминали, вам следует создать базу логинов(емейлов) с паролями. И говоря "базу" я не обязательно имею ввиду СУБД, достаточно простых файлов, если с ними будет удобнее манипулировать в вашем приложении. При авторизации необходимо проверять введенный емеил и пароль на соответствие (ну а если я представлюсь админом сайта, и введу пароль 123 -- вы меня тоже пустите?). Другие способы авторизации (нативная протокола http(s), номер мобильного телефона, идентификация через емеил итд), а равно многофакторный способы авторизации также существуют, но пока не забивайте себе этим голову, попробуйте реализовать "классический" (умпомянутый) выше способ.
Цитата Сообщение от SanychBY Посмотреть сообщение
Ну а кроме использования кук или сессии
в smf, а также, я слышал, что и в одноклассниках, если клиент не поддерживает куки, то на каждый запрос добавляется специальная переменная в строку запроса (get-параметр), url-ка выглядит слегка коряво: вместо http://example.com/index.php будет что-то вроде http://example.com/index.php?t... D567BCA347, при этом серверные методы "запоминания" пользователя остаются прежними: эта секретная строка запоминается на сервере, и с ней ассоциируются некоторые данные. В дальнейшем, клиент отсылает строку с таким же значением, и сервер его "узнает", и считывает все данные, связанные с ним.
Можно попробовать аналогичный способ с передачей не GET, а POST параметра, тогда в строке запроса не будет лишней информации, но при этом вы лишаетесь кеширования, и кроме того, нельзя при обращении методом GET передавать POST параметры. Например, вы не сможете просто взять и впихать ссылку на страницу и забыть о ней. Придется либо делать кучу форм (раз уж клиент не поддерживает COOKIES, то наверняка он не поддерживает и JS), ну либо же, если встретилась редкая комбинация, через xhr, скрытые ифреймы,хоть WebSockets или jsonp -- вообщем, на ваш выбор, транспортов полно. Главное, это преобразовать все GET в POST запросы, и передать эту уникальную строку обратно на сервер, чтобы он нас "опознал". Вообщем, такой способ подойдет, скорее всего, только лишь для "богатых" (rich) веб-приложений, где почти все пользователи почти всегда авторизованы, и каждое действие по своей сути является не чтением, а изменением состояния (семантика метода POST).

Цитата Сообщение от SanychBY Посмотреть сообщение
с точки зрения безопасности
Это следующий этап. Необходимо защититься от следующих угроз:
  • Фиксация сессии. Простейший способ в php: время от времени делать session_regenerate_id. Тут есть небольшие подводные камни (например, http://habrahabr.ru/qa/4962/), но их можно зачастую избежать, и/или обойти.
  • CSRF. Один из способов представлен тут же.
  • другие. пожалуй, наиболее полный список с советами по устранению приведен тут, более общий список (касательно не только аутентификации и авторизации, но и их тоже) -- http://projects.webappsec.org/... sification .

Цитата Сообщение от SanychBY Посмотреть сообщение
какие подводный камни существуют
Дофига. например: против целевых атак обязательно нужно учесть, что функции mt_rand и rand в пхп небезопасны. Они же используются для генерации ID сессии, и довольно часто ими пользуются для генерации паролей. по-русски об этой проблеме можно почитать тут, тут и тут (первые три ссылки в гугле, последняя, на мой взгляд, наиболее содержательная).

Также, стоит помнить о параметре httponly в куках, а если используется https, то еще и secure.
Вообщем, пожалуй все. Спасибо, что дочитали до конца, надеюсь я несильно взорвал вам мозг. Удачи!
2
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
15.07.2013, 17:30
генерируй случайной число от 1 до [много]. Потом отправляй его как куки при входе, затем проси обратно это куки и сверяй его в базе данных с ником
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
15.07.2013, 17:37  [ТС]
NEbO, А на русском есть? И что бы понятно было как от этого защититься?
Greeezly, И что это нам даст?
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
15.07.2013, 17:42
То, что рандомное куки не смогут подобрать
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
15.07.2013, 17:44  [ТС]
Цитата Сообщение от Greeezly Посмотреть сообщение
То, что рандомное куки не смогут подобрать
Украл и все.
Сессии надежнее

Добавлено через 44 секунды
Greeezly, Я считаю Вашу идею бесполезной тратой ресурсов.
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
15.07.2013, 17:48
сессии так-то используют куки
0
 Аватар для SanychBY
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
15.07.2013, 17:49  [ТС]
Цитата Сообщение от Greeezly Посмотреть сообщение
сессии так-то используют куки
Сессия так - то защищена
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2013, 17:49
Помогаю со студенческими работами здесь

Прямоугольник из символов, которые ввел пользователь. Можно ли упростить условие?
//программа делает прямоугольник из символов которые ввел пользователь //высоту и длину тоже вводит пользователь // #include...

Вычислить выражение с заданной точностью, которую задает пользователь (Условие во вложении)

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

Запрос вида (условие И условие) ИЛИ (условие И условие)
Товарищи, не очень силен в MySQL, поэтому прошу помощи. Допустим, есть таблица данных с четырьмя столбцами: задача, статус, согласователь1,...

Вывести количествово элементов ряда, сумму элементов и первый элемент ряда, не вошедший в сумму
Вычислить сумму элеменов ряда S, прекращ. суммиров., когда очередной элемент ряда станет < 10^-4 при X=0,5. Вывести кол-во элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
SDL3_mixer - это библиотека я для воспроизведения аудио. Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru