PDA

View Full Version : Отсутствие проверки Id переменной


Soniks
18.04.2007, 14:40
Продукт: PHP-Nuke
Версия: 8.0 и ниже
Описание:
В скриптах системы отсутствует проверка входных данных, поэтому при удачных стечениях обстоятельств (magic_quotes - OFF, register_global - ON, отсутствие фильтров SQL-инъекций), злоумышленник может выполнить SQL-Инъекцию.


Устранение:
Для более эффекта добавим проверку в главном файле.
Открываем: mainfile.php
Находим (43 строка):
// override old superglobals if php is higher then 4.1.0
if($phpver >= '4.1.0') {
$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_SERVER_VARS = $_SERVER;
$HTTP_POST_FILES = $_FILES;
$HTTP_ENV_VARS = $_ENV;
$PHP_SELF = $_SERVER['PHP_SELF'];
if(isset($_SESSION)) {
$HTTP_SESSION_VARS = $_SESSION;
}
if(isset($_COOKIE)) {
$HTTP_COOKIE_VARS= $_COOKIE;
}
}
Ниже добавляем проверку:
if(isset($_REQUEST['id'])) $id = intval($_REQUEST['id']);
if(isset($_REQUEST['lid'])) $lid = intval($_REQUEST['lid']);
if(isset($_REQUEST['cid'])) $cid = intval($_REQUEST['cid']);
if(isset($_REQUEST['pid'])) $pid = intval($_REQUEST['pid']);
if(isset($_REQUEST['sid'])) $sid = intval($_REQUEST['sid']);
if(isset($_REQUEST['tid'])) $tid = intval($_REQUEST['tid']);

Anibus
19.04.2007, 09:25
постоянно получаю следующие:

PHP Notice: Undefined index: lid in /***/mainfile.php on line 70
PHP Notice: Undefined index: id in /***/mainfile.php on line 71
PHP Notice: Undefined index: cid in /***/mainfile.php on line 72
PHP Notice: Undefined index: pid in /***/mainfile.php on line 73
PHP Notice: Undefined index: sid in /***/mainfile.php on line 74

версия 7.9 3.2 2.0

Soniks
19.04.2007, 11:22
отключите вывод notice на экране, или код выше перепишите (я подправил)

Anibus
19.04.2007, 16:30
Soniks большое спасибо.

Кстати в версии 7.6 строчек, после которых нужно ставить код нет.

Куда посоветуете там вставлять код?

Alexander-V-Sh
20.04.2007, 17:25
Я так понимаю, если в каждой функции каждого модуля стоит:

$sid = intval($sid);

то это нафик ненужно?

Soniks
20.04.2007, 21:56
Anibus после писвоения глобальных переменных или до включения GZip
Alexander-V-Sh да

Val
25.08.2007, 22:48
PHPNuke 7.9 rus

При добавлении к коду в Mainfile.php

// override old superglobals if php is higher then 4.1.0
if($phpver >= '4.1.0') {
$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_SERVER_VARS = $_SERVER;
$HTTP_POST_FILES = $_FILES;
$HTTP_ENV_VARS = $_ENV;
$PHP_SELF = $_SERVER['PHP_SELF'];
if(isset($_SESSION)) {
$HTTP_SESSION_VARS = $_SESSION;
}
if(isset($_COOKIE)) {
$HTTP_COOKIE_VARS= $_COOKIE;
}
}

добавляю :pirate: :pirate:

$lid = isset($_REQUEST['lid'])?intval($_REQUEST['lid']):"";
$id = isset($_REQUEST['id'])?intval($_REQUEST['id']):"";
$cid = isset($_REQUEST['cid'])?intval($_REQUEST['cid']):"";
$pid = isset($_REQUEST['pid'])?intval($_REQUEST['pid']):"";
$sid = isset($_REQUEST['sid'])?intval($_REQUEST['sid']):"";

но при попытке прочитать какую-либо новость сайт не реагирует (страница грузиться бесконечно).
Грешу на строку

$pid = isset($_REQUEST['pid'])?intval($_REQUEST['pid']):"";

при ее комментировании все становится на круги своя.
Как исправить код?

:pirate: :

Soniks
28.08.2007, 11:41
Val а какой у вас модуль Новостей? производили ли вы там изменения? какая версия системы?

Val
29.08.2007, 01:58
Блок новостей - стандартный комплекта PHP Nuke 7.9 rus.
Версия в конфиге стоит Version_Num 8.0
В модуле изменения еще не проводил, тестирую на локалхосте в поисках багов и вот один обнаружился.

Val
29.08.2007, 18:08
у всех прошу прощения по поводу вопроса от 25.08.2007 20:48, все в порядке...

Хотя нет!!! Проблема осталась.Все таже строка... :sad:

Soniks
31.08.2007, 21:21
Val спасибо, поправил первое сообщение.