![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| HackMan |
|
||||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Есть скрипт, для авторизации администратора
login.php
примечания:
Есть скрипт, для проверки валидности сессии, и для её продлевания check.php
примечания:
И есть много страниц самой админки. Посути, страница одна, но от различных значений переменных инклудятся разные скрипты. Вопрос такой: нужно ли мне вставлять require "check.php" в каждый скрипт, который потом инклудится в главную страницу, или можно ограничеться только одной главной страницей? -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
||||
|
|||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Если есть один скрипт - точка входа, достаточно подключать в нем.
Но вообще, я думаю, решение не из лучших. register_globals не стоит включать даже исходя из потенциальной опасности пропустить несанкционированную регистрацию переменных. А у Вас тут прямые дыры. Что если я, не проходя логина, вызову основную страницу следующим образом:
Переменной $session в сессии нет. Не зарегистрирована. Но вы же и не проверяете, что она зарегистрирована. Ваш скрипт спокойно "скушает" ее из GET. Никакой проверки на правдоподобность $session['id'] тоже нет. Хакеру остается только подобрать подходящий таймстемп. Советую: *) отключить register_globals *) различать, откуда приходят переменные ($_GET, $_POST, $_COOKIE, $_SESSION) *) возможно, добавить проверку на правдоподобность $session['id'] Ну и не стоит одну и ту же функцию get_ip() определять в двух файлах. Подключайте ее из какого-то одного Добавлено через 10 минут и 58 секунд Сами логин и пароль тоже безопаснее хранить не зашитыми hardcoded в скрипт, а где-нибудь в конфигурации за пределами DOCUMENT_ROOT или защищенной .htaccess Это сообщение отредактировал(а) Golda - 2.7.2007, 00:08 -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| HackMan |
|
||||||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Ну как же... у меня в каждой странице стоит вначале require "check.php"; так что проверка на session[id] всё же есть index.html
так что хакеру придётся ещё вычислить md5 от собственного ip спасибо за то что указали на дырку. делалось ночию, недоглядел а как же другим страницам узнать, что администратор авторизировался?
это всё будет. сейчас главное сделать авторизацию Это сообщение отредактировал(а) HackMan - 2.7.2007, 01:13 -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
||||||
|
|||||||
| Golda |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Ну и что? Ну, попал он в check.php. Там скрипт попытает поднять сессию (session_start()). Переменная $session из сессионных данных не появилась. Но зато она существует благодаря GET-запросу. Поэтому проверка isset($session) будет пройдена. Вторая проверка - тоже не невыполнимая задача. Да, проверка на session[id] есть. Я проглядела. Но, поверьте, хакеру не сложно будет узнать как свой IP, так и md5()от него. Даже подбор значения по известному хешу md5() часто возможен. А уж прямое преобразование точно проблемы не представляет, если стало ясно, какие данные пользователя искать. Да нет, здесь есть, конечно, проблема. Проблема - понять, что же проверяет скрипт. На самом деле Ваш вывод не дает прямых подсказок пользователю о том, что скрипт проверяет и какие имена переменных использует. Но все же лучше таких дыр не оставлять.
Со всеми бывает Подключайте check.php вначале, до загрузки остальных модулей. Тогда, если сессия пользователя невалидна, строки
перенаправят пользователя на login.php и завершат работу скрипта. А если уж дальнейшие модули загрузились, значит с авторизацией все в порядке. Остальным модулям ничего и проверять не нужно -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
||||||
|
|||||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Я строчку unset($session) запихнул не в тот скрипт
Его надо было в check.php. Тогда переменная $session просто обнуляется, и неважно, чем она была раннее передана. А дальше открывается сессия, и если переменная $session не подгругилась из неё, то и проверка isset($session) не будет выполнена. Но как я понимаю, мне придётся в каждый скрипт прописывать require "check.php" для того чтобы проверить, создана ли сессия. Иначе пользователь просто введёт в строке адреса путь к нужному скрипту, и смысла от авторизации никакой -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Да, это решает проблему. Я бы все же отключила register_globals, чтобы не нарваться в дальнейшем на подобные, но... вольному воля Можно так. Но мне больше нравятся и другие вариант: работы меньше, да и расчет идет не на потенциально уязвимый скрипт авторизации (я в данном случае не именно Ваш имею в виду, любой), а на средства сервера с гораздо более простой, прямолинейной, а значит и надежной логикой. К тому же такие лишние запросы обрабатываться будут быстрее, не доходя до PHP вообще
Это сообщение отредактировал(а) Golda - 2.7.2007, 07:47 -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
гениально!
вобщем, надо через .htaccess запретить доступ к подключаемым скриптам, а в основных писать require "check.php" Большое спасибо! P.S. Жалко, нехватает несколько постов, что бы мог плюсики выставлять... -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
помнится, в manual-e по PHP учат вместо unset($_SESSION) использовать присваивание: $_SESSION = Array();
|
|||
|
||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
А где вы видели, что бы я использовал unset($_SESSION)?
-------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| ilyalyu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Вот. Извини, не заметил отсутствия прочерка Это сообщение отредактировал(а) ilyalyu - 10.7.2007, 23:55 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |