Меню сайта
Он-лайн

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Яндекс.Метрика
Категории раздела
Информация [0]
Пресс-релизы [4]
php модули для uCoz [4]
JavaScript и jQuery скрипты для uCoz [0]
Баг-фиксы [1]
Полезные советы [1]
Сторонние разработки [1]
Наш опрос
Вы курите?
Всего ответов: 138
Советуем посетить
Сериал "Мужчина во мне" смотреть онлайн все серии

Главная » 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
<body>
добавьте:
Code
<div style="display: none;">online{login: $_USERNAME$; fn: $_NAME$; gr: $_GROUP_NAME$;}</div>

Приношу всем извинения за приченённые неудобства.
Категория: Баг-фиксы | Просмотров: 1195 | Добавил: Sirius | Теги: php на ucoz, он-лайн, Баг-фикс | Рейтинг: 0.0/0 |
Всего комментариев: 6
6 Vovich  
0
Sirius а в архиве уже исправлена версия или нет???

5 Sirius  
1
Артём, а сколько пользователь был минут назад?

4 Артём  
-2
Sirius, не гони, мой скрипт намного лучше как написал ссылку LoL!!!

3 Sirius  
1
LoL, у нас скрипт покруче будет. И бесплатно!

2 LoL  
-1
http://www.plati.ru/asp/pay.asp?id_d=805019&searchstr=ucoz&agent=0

1 Sirius  
1
Если возникают проблемы с кодировкой, то замените строку
Code
$raplace1 = array ('Ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', 'ё', '0');

на аналогичную из старого файла rec.php

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Форма входа
Логин:
Пароль:
Профиль
Здравствуйте, Гость


Полное имя: Гость
ip: 3.15.226.248
Группа: Гости
Браузер:
Посещали сайт: 01.05.2024 19:11

Новых сообщений нет
Ваш профиль
Добавить новость
Выход
Календарь
«  Июнь 2009  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Tag cloud
© 2024 php4ucoz. При распространении модулей ссылка на php4.ucoz.ru обязательна!