Перейти к содержимому

Сервис обмена электронных валют


Как обезопасить подключающий скрипт от атаки

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 07 Сентябрь 2009 - 13:30

есть адресная строка, например index.php?module=service
по в зависимости от параметров GET подключается тот или иной модуль, как обезопасить подключающий скрипт от атаки

 <?php

// идентификация модуля
if(!get_magic_quotes_gpc())
{
$module = mysql_escape_string($_GET['module']);
}
else
{
$module = $_GET['module'];
}

// вызов модуля
$link = $module.".php";
if (file_exists("include/".$link))
{
include("include/".$link);
}
else
{
echo $error;
}
?>

 

 

  • 0

#2 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 07 Сентябрь 2009 - 14:23

if(!preg_match("/^[a-z0-9]+$/i",$module)) $module = '';

switch ($module) {
case "gb":
$file = "module/gb.php";
break;
case "news":
$file = "module/news.php";
break;
default: $file = "module/index.php";
}

if (is_readable($file)) {
include($file);
} else {
echo "Страница не найдена";
}


это почти такой же код только более безопастный
  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 07 Сентябрь 2009 - 20:20

sc2r2bey, Евгений правильно написал, но это только в простых системах уместно. Ведь во множестве движков модули добавляются в независимости от ядра, и тут бы я всё же сделал включение модулей через взаимодействие с ядром. То есть у нас в ядре есть функция с 3 параметрами включения условий.
1) "Имя для ассоциации"
2) "Подключаемый файл"
3) "метод взаимодействия"(где прослушивать, не обязательное) POST, GET, SESSION, COOKIE, что-то другое

Повторяю ещё раз это на подобии API взаимодействия ядра и модулей. Больше не для чего это использовать не нужно.
  • 0

#4 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 08 Сентябрь 2009 - 13:42

я ничего не понял, можно на пальцах пояснить :)


  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Сентябрь 2009 - 13:20

sc2r2bey, ну что не понятного:
Ядро - это основа всякого движка без дополнений, то есть это сама основа заложенная изначально без подключаемых модулей. То есть к примеру в ядрол входят:
1) Шаблоны и их обработка;
2) Изначальные функции и классы для оптимальной работы системы;
3) Файлы-обработчики изначальные для общения клиента с сервером.

Модули(например):
1) Вывод контента из базы(новости, статьи, акции и др.)
2) Комментарии
3) Дневники
4) собственные блоги
5) Работа связанная с зарегистрированным пользователем(к примеру ЛС или вывод последних прочитанных тем)
и тд.

Так вот модули должны взаимодействовать с ядром через API, то есть в БД у вас есть таблица с модулями, каким образом обнаружить, что нужно подключить модуль(прослушка POST SESSION и тд), путь к модулю(не обязательно, всё зависит от организации расширяемости).
Так вот в ядре у нас есть функция которая просто запрашивает все включенные модули и поочередно проверяет нужно ли их включить в страницу. А как уж всё остальное организовать это надо усердно думать...
Вообще некоторые будут против подобного, потому что скажут, что подобный подход только грузит систему, не лучше ли будет авключать модули только там где они нужны. Но я считаю, что пара милисекунд да и не в крупных проектах это не так существенно, да и плюс существует сжатие6 и кеширование контента, что увеличивает производительность.
  • 0

#6 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 13 Сентябрь 2009 - 17:35

супер! а как создается ядро и API давай попробуем рразобрать на самом элементарном уровне и премере?
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Сентябрь 2009 - 22:52

sc2r2bey, если бы у меня было на это время, пока не могу...
  • 0

#8 extonec

extonec
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 25 Сентябрь 2009 - 14:30

Если я правильно понял ваш диалог то мне сюда. (небольшой вопрос)
есть страница 1 на ней ссылка на страницу 2 с параметром ?tag=2 , это отбражается в адресной строке слышал это опасно sql инъекции вроде бы.
как мне поступить?
1. Еще незнаю как но читал инфу что можно спрятать подобные запросы через .htaccess, гарантирует ли это безопасность? (врятли ...)
2. А если сделать при создании таблицы в БД(mysql) ограничение на количество символов? т.е. таблица 1 поле tag макс значение "2" - это поможет или нет?.
3. Видел инфу о проверке соответствия значения и если оно соответствует заданным правилам то запрос идет. (это лучший вариант?)


P.S. мой первый пост на форуме, всех приветствую.
  • 0

#9 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 25 Сентябрь 2009 - 15:02

есть страница 1 на ней ссылка на страницу 2 с параметром ?tag=2 , это отбражается в адресной строке слышал это опасно sql инъекции вроде бы.

можно обработать полученную GET переменную функцией intval()
$tag = intval($_GET['tag']);

а потом производить манипуляции с переменной $tag
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 29 Сентябрь 2009 - 00:49

extonec,

есть страница 1 на ней ссылка на страницу 2 с параметром ?tag=2 , это отбражается в адресной строке слышал это опасно sql инъекции вроде бы.
как мне поступить?

Выше правильно написали

1. Еще незнаю как но читал инфу что можно спрятать подобные запросы через .htaccess, гарантирует ли это безопасность? (врятли ...)

Ну спрятать не спрятать а вот ограничить ввод символов по маске очень даже возможно, но настоятельно не рекомендую полагаться на .htaccess маски.

2. А если сделать при создании таблицы в БД(mysql) ограничение на количество символов? т.е. таблица 1 поле tag макс значение "2" - это поможет или нет?.

Что-то вы сами не понимаете что говорите, как вы создадите ограничение на макс значение?

3. Видел инфу о проверке соответствия значения и если оно соответствует заданным правилам то запрос идет. (это лучший вариант?)

Конечно правила это чёткость в действиях, но слишком загромождает код. Нужно придумать для себя оптимальный вариант и конечно же продумать проверку всех параметров которые могут быть подменены.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru