Он-лайн
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная »
2009 » Июнь » 24 » Закрываем дыру в защите
Закрываем дыру в защите
12:58
Не так давно была обнаружена дыра в защите. Можно было подменять данные через исходный код. Профиксим это: Откройте: rec.php Замените всё содержимое на: Code
<?php /*================================================== Файл: rec.php -------------------------------------------------- Назначение: Запись в б/д ================================================== При распространении модуля он-лайн ссылка на официальный сайт php4.ucoz.ru обязательна! ================================================== */ include "cfg.php"; if($_GET[id] != 0) { $link = "http://".$cfg[site]."/index/8-".$_GET[id]; $fd = fopen($link, "r"); $text = ""; while(!feof ($fd)) $text .= fgets($fd, 4096); fclose ($fd); preg_match("#login:[\s]*([^;]*);#i", $text , $e_login); preg_match("#fn:[\s]*([^;]*);#i", $text , $e_fn); preg_match("#gr:[\s]*([^;]*);#i", $text , $e_gr); if($_GET[login] != $e_login[1]) exit("document.write (\"Hacking attempt! Logins don`t match!\");"); if($_GET[name] != $e_fn[1]) exit("document.write (\"Hacking attempt! Full names don`t match!\");"); if($_GET[gr] != $e_gr[1]) exit("document.write (\"Hacking attempt! Groups don`t match!\");"); //Базовая защита от исполнения скрипта на других сайтах if((!preg_match("/^http\:\/\/$cfg[site]\//i", $_SERVER[HTTP_REFERER]))&&(!preg_match("/^http\:\/\/www\.$cfg[site]\//i", $_SERVER[HTTP_REFERER]))) exit("document.write (\"Hacking attempt!\");"); //Исполняем файл конфигурации } include "config.php"; if($_GET[id] != 0) { //Шифруем кириллицу, чтобы не возникало проблем с кодировкой $search1 = array ("'Ё'", "'А'", "'Б'", "'В'", "'Г'", "'Д'", "'Е'", "'Ж'", "'З'", "'И'", "'Й'", "'К'", "'Л'", "'М'", "'Н'", "'О'", "'П'", "'Р'", "'С'", "'Т'", "'У'", "'Ф'", "'Х'", "'Ц'", "'Ч'", "'Ш'", "'Щ'", "'Ъ'", "'Ы'", "'Ь'", "'Э'", "'Ю'", "'Я'", "'а'", "'б'", "'в'", "'г'", "'д'", "'е'", "'ж'", "'з'", "'и'", "'й'", "'к'", "'л'", "'м'", "'н'", "'о'", "'п'", "'р'", "'с'", "'т'", "'у'", "'ф'", "'х'", "'ц'", "'ч'", "'ш'", "'щ'", "'ъ'", "'ы'", "'ь'", "'э'", "'ю'", "'я'", "'ё'", "'0'e"); $raplace1 = array ('Ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', 'ё', '0'); $w_fn = mb_convert_encoding("$_GET[name]", "Windows-1251", "UTF-8"); $w_gr = mb_convert_encoding("$_GET[gr]", "Windows-1251", "UTF-8"); $w_br = mb_convert_encoding("$_GET[browser]", "Windows-1251", "UTF-8"); $w_wh = mb_convert_encoding("$_GET[str]", "Windows-1251", "UTF-8"); $w_gd = mb_convert_encoding("$_GET[news]", "Windows-1251", "UTF-8"); $w_lo = mb_convert_encoding("$_GET[login]", "Windows-1251", "UTF-8"); $r_fn = preg_replace ($search1,$raplace1,$w_fn); $r_gr = preg_replace ($search1,$raplace1,$w_gr); $r_br = preg_replace ($search1,$raplace1,$w_br); $r_wh = preg_replace ($search1,$raplace1,$w_wh); $r_gd = preg_replace ($search1,$raplace1,$w_gd); $r_lo = preg_replace ($search1,$raplace1,$w_lo); $search2 = array ("'<'", "'>'", "'\('", "'\)'", "'\''", "'\"'",); $r_fn = preg_replace ($search2,"",$r_fn); $r_gr = preg_replace ($search2,"",$r_gr); $r_br = preg_replace ($search2,"",$r_br); $r_wh = preg_replace ($search2,"",$r_wh); $r_lo = preg_replace ($search2,'',$r_lo); $r_ava = preg_replace ($search2,'',$_GET[ava]); $r_news = preg_replace ($search2,'',$_GET[news]); } //Объявляем константы времени $sec = date("s"); $min = date("i"); $hour = date("G"); $day = date("d"); $month = date("m"); $year = date("Y"); if($_GET[id] != 0) { //Формируем запрос (присутсвие пользователя в таблице) к б/д и исполняем его $query = "SELECT * FROM u_online WHERE user = '$r_lo'"; $ses = mysql_query($query); if(!$ses) exit ("document.write (\"Ошибка в запросе к бд.\");"); if(mysql_num_rows($ses) > 0) { //Если такой пользователь уже существует в б/д, то исполняем запрос на обновление данных $upd_query = "UPDATE u_online SET ava = '$r_ava', u_fullname = '$r_fn', u_ip = '$_SERVER[REMOTE_ADDR]', u_gr = '$r_gr', u_browser = '$r_br', u_where = '$r_wh', wh = '$r_news', u_time = NOW() WHERE user = '$r_lo'"; $updt = mysql_query($upd_query); if(!$updt) exit ("document.write (\"Ошибка при обновлении.\");"); }else{ //Если пользователя ещё не существует, то его данные создаются $cr_query = "INSERT INTO u_online VALUES ('$r_ava', '$r_lo', '$r_fn', '$_SERVER[REMOTE_ADDR]', '$r_gr', '$r_br', '$r_wh', '$r_news', NOW())"; $cre = mysql_query($cr_query); if(!$cre) exit ("document.write (\"Ошибка при записи.\");"); } } ?>
Замените код вызова скрипта: Code
<script src="http://ваш_сайт/online.php?login=$USERNAME$&ava=$USER_AVATAR_URL$&name=$USER_FULL_NAME$&ip=$IP_ADDRESS$&gr=$USER_GROUP$&str=$MODULE_NAME$&date=$DATE$&news=$TITLE_BAR$&time=$TIME$&browser=$USER_AGENT$ $USER_AGENT_VER$&id=$USER_ID$"></script>
Откройте шаблон "Персональная страница пользователей", после добавьте: Code
<div style="display: none;">online{login: $_USERNAME$; fn: $_NAME$; gr: $_GROUP_NAME$;}</div>
Приношу всем извинения за приченённые неудобства.
Категория: Баг-фиксы |
Просмотров: 1221 |
Добавил: Sirius
| Теги: php на ucoz , он-лайн , Баг-фикс
| Рейтинг: 0.0/0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Всего комментариев: 6
Порядок вывода комментариев:
По умолчанию
Сначала новые
Сначала старые
0
Sirius а в архиве уже исправлена версия или нет???
1
Артём, а сколько пользователь был минут назад?
4
Артём
(22.07.2009 13:05)
-2
Sirius, не гони, мой скрипт намного лучше как написал ссылку LoL!!!
1
LoL, у нас скрипт покруче будет. И бесплатно!
-1
http://www.plati.ru/asp/pay.asp?id_d=805019&searchstr=ucoz&agent=0
1
Если возникают проблемы с кодировкой, то замените строку
Code
$raplace1 = array ('Ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', 'ё', '0');
на аналогичную из старого файла rec.php
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]