dle.in.ua » Модули » Защита сайтов by kzpromo

Защита сайтов by kzpromo

Автор: nugumanov от 28-06-2011, 09:20
Защита сайтов by kzpromo

Уже несколько лет наблюдаю как растет тенденция взломов дле сайтов. Сотни тысяч сайтов страдали от взломов, миллионы сайтов подвержены атакам.
Решил поделиться с наработками которые уже год внедрены в релиз SECURED DLE и обеспечивают нормальную работу сайта без потери информации. Многие будут осуждать меня за данную заплатку, так как кому-то я испорчу бизнес, сильно усложнив взлом. Данная наработка подходит практически к любому сайту где есть php. Я не держу обиду на тех кто не верит в защищенность релиза.
И так я расскажу как обезопасить себя от: шеллов, sql inj, php inj, xss
Первым делом представлю свой модуль, его нужно подключить перед подключением в базу
include_once("Название модуля");

---------------------------------------------------------------------------
<?php
//отражение хакерских запросов
//autor: kzpromo

//поставить еденицу если хотите включить отладку запросов
$debug = 0;

$bag_req = array("select", "eval", "echo", "UPDATE", "LIMIT", "INSERT", "INTO", "union", "CONCAT", "INFORMATION_SCHEMA", "OUTFILE", "DUMPFILE", "LOAD_FILE", "BENCHMARK", "SUBSTRING", "ASCII", "CHAR", "database", "HEX", "\\.\\/", "%00", "\\.htaccess", "config\\.php", "document\\.cookie");
$request = serialize($_GET);
$urequest = urldecode($request);
$brequest = base64_decode($request);
if($_GET)
{
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
  {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
if($_POST)
{
$request = str_replace("selected_language", "sl", serialize($_POST));
$urequest = urldecode($request);
$brequest = base64_decode($request);
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
   {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
?>


full code
http://pastebin.com/qeqZaNHx

Модуль проверяет все GET и POST запросы и при нахождении плохих блокирует, не дав уйти запросам в базу или далее.

Дальше нам необходимо защитить себя от шеллов на сайте
Нужно отредактировать php.ini и отключить следующие функции
disable_functions = eval, exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname

Данными функциями успешно пользуются шеллы, необходимо отключить функции на уровне сервера, так как если у вас хостинг, то на соседнем аккаунте шеллы могут работать, что может привести ко взлому

Для народа старался kzpromo!
  • Группа: User
  • Icq: 55054644
  • Комментариев: 33
  • Публикаций: 1
  • Кто пробовал ??
    • TravelMate
    • Регистрация: 19.06.2010
    • Репутация: (0|0|0)
    • 28 июня 2011 10:35
    • 1
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 8
  • Публикаций: 0
  • А можно пошаговую инструкцию? Спасибо заранее!
    • dementiy
    • Регистрация: 10.12.2009
    • Репутация: (0|0|0)
    • 28 июня 2011 11:33
    • 2
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 64
  • Публикаций: 20
  • Установка в дле
    1)Назовем наш модуль security.class.php
    2)Загружаем файл в engine/classes
    3)Открываем engine/classes/mysql.php
    перед
    if ( extension_loaded('mysqli') AND version_compare("5.0.5", phpversion(), "!=") )
    {
        include_once( ENGINE_DIR."/classes/mysqli.class.php" );
    }
    else
    {
        include_once( ENGINE_DIR."/classes/mysql.class.php" );
    }

    Вставляем
    include_once( ENGINE_DIR."/classes/security.class.php" );

    --------------------
    • nugumanov
    • Регистрация: 9.02.2009
    • Репутация: (0|0|0)
    • 28 июня 2011 11:44
    • 3
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • nugumanov,
    //отражение хакерских запросов

    вот эта вещь. На первый взляд ничего сложного.
    но естественно ее не каждый напишет.
    Получается перед отправкой в БД все гет и пост запросы проверяются на наличие в нем $bag_req ( "UPDATE", "LIMIT", "INSERT", "INTO".......), а не замедлит это работу сайта? (не в целом а отправка сообщений, новостей) мне кажется нагрузка возрастет.
    А вообще МОЛОДЕЦ! Есть над чем подумать. Только кажется целсофт приберет к рукам твой хак.

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 28 июня 2011 12:38
    • 4
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 64
  • Публикаций: 20
  • замедляет, но не значительно
    безопасность важнее

    --------------------
    • nugumanov
    • Регистрация: 9.02.2009
    • Репутация: (0|0|0)
    • 28 июня 2011 12:42
    • 5
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 4
  • Публикаций: 0
  • безопасность превыше всего. Огромнейшее спасибо!
    • lamov
    • Регистрация: 12.02.2011
    • Репутация: (0|0|0)
    • 28 июня 2011 19:30
    • 6
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • nugumanov,
    дорабатывать можно?
    хочу дописать черный список IP (бан)

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 28 июня 2011 19:52
    • 7
    ^
  • Группа: User
  • Icq: 628759137
  • Комментариев: 73
  • Публикаций: 2
  • Наслаждайтесь 85% защитой вашего сайта


    все версии

    ttp://sourceforge.net/projects/web-firewall/files/

    сайт разработки

    ttp://web-firewall.sourceforge.net/

    nj
    • dns_ua
    • Регистрация: 19.06.2010
    • Репутация: (1|1|0)
    • 28 июня 2011 20:43
    • 8
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • dns_ua,
    ну вот садись и настраивай, где будут отправятся GET запросы где POST или кукисы.
    тебе надо :
    знать все переменные в которых хранятся:
    1) в массиве гет
    2)массиве пост
    3) в $_cookie

    потом писать еще правила, как я понял. А потом еще обработчик написать..

    Как сделаешь выкладый, а пока это херня на палочке.
    И наслаждаться тут нечем.
    И Я даже уверен что ты сам этими не пользуешся) а этот кусок кода уже унес и даже спасибо не сказал))

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 28 июня 2011 21:15
    • 9
    ^
  • Группа: User
  • Icq: 628759137
  • Комментариев: 73
  • Публикаций: 2
  • AlexBen,

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

    у вот садись и настраивай, где будут отправятся GET запросы где POST или кукисы.
    тебе надо :
    знать все переменные в которых хранятся:
    1) в массиве гет
    2)массиве пост
    3) в $_cookie


    Имеется защита от доса переброс на страницу 403 или на другой адрес сервака

    Скрипт настраивается автоматом, и делает слежку за всеми гобальными запросами. Следит за шелами и сканирует содержимое php скриптов на предметы таких функция как eval и так далее и выдает инфу где в камом скрипте и какакя строка.

    Рекомендую Ultimate Web Firewall v1.1.1

    • dns_ua
    • Регистрация: 19.06.2010
    • Репутация: (1|1|0)
    • 28 июня 2011 23:27
    • 10
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • Цитата: dns_ua
    Имеется защита от доса

    ты наверно хотел сказать от легкого флуда?!)

    Цитата: dns_ua
    А если тебя жаба давит что некоторые хрошо знают web-языки, то пойди купи себе флаг и медаль.


    Это говорит человек который не имеет базовые знания HTML и CSS )
    Да и я даже не беспокоюсь, мне хватает знать JS + хмтл с css.
    Вообще тема не туда нас привела, хотел бы по нормальному, создал бы топик на форуме и там по флудили, т.к. я не говорю что этот скрипт плохой.
    Но есть минусы от бальной нагрузки и лишнего использования памяти.
    P.S. Медали есть) А флаг куплю обязательно!

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 29 июня 2011 00:28
    • 11
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 64
  • Публикаций: 20
  • дорабатывать можно?
    хочу дописать черный список IP (бан)

    без проблем

    Ultimate Web Firewall - хороший скрипт))

    --------------------
    • nugumanov
    • Регистрация: 9.02.2009
    • Репутация: (0|0|0)
    • 29 июня 2011 07:39
    • 12
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 7
  • Публикаций: 0
  • При обновлении карты сайта появляется надпись: BAD REQUEST
    • family
    • Регистрация: 17.03.2010
    • Репутация: (0|0|0)
    • 29 июня 2011 18:05
    • 13
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • family,
    надо исключить карту сайта

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 29 июня 2011 18:27
    • 14
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 7
  • Публикаций: 0
  • А что именно надо вырезать из кода? И главное, не уменьшится ли безопасность?
    • family
    • Регистрация: 17.03.2010
    • Репутация: (0|0|0)
    • 29 июня 2011 20:16
    • 15
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • family,

    LIMIT потому что там name так называется)

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 29 июня 2011 21:09
    • 16
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 7
  • Публикаций: 0
  • Спасибо!!
    • family
    • Регистрация: 17.03.2010
    • Репутация: (0|0|0)
    • 29 июня 2011 22:05
    • 17
    ^
  • Группа: User
  • Icq: 1739390
  • Комментариев: 274
  • Публикаций: 44
  • подправленный вариант
    _http://pastebin.com/submLC8r

    --------------------
    • AlexBen
    • Регистрация: 29.01.2010
    • Репутация: (8|7|-1)
    • 30 июня 2011 01:57
    • 18
    ^
  • Группа: User
  • Icq: 485348926
  • Комментариев: 20
  • Публикаций: 0
  • Попробуем...

    --------------------
    • RaZoR2009
    • Регистрация: 17.06.2009
    • Репутация: (0|0|0)
    • 12 июля 2011 15:46
    • 19
    ^
    Информация
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.