Данный материал предоставлен сайтом ProWebber.cc исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Скачать бесплатно DLE Forum (Правка бага с редактированием поста).
Скачать бесплатно DLE Forum (Правка бага с редактированием поста).
Обнаружен баг с редактированием комментариев в DLE forum v2.3, 2.4
С помощью данного бага можно запросто отредактирвоать любой комментарий без специальных прав, т.е. обычный пользователь может отредактировать комментарий администратора.
Итак инструкция по исправлению бага:
[spoiler=Версия 2.3]
Открываем файл /engine/forum/ajax/editpost.php
Находим:
require_once ENGINE_DIR.'/forum/sources/components/functions.php';
Добавляем ниже:
require_once ENGINE_DIR.'/forum/classes/cache.php';
$fcache = new forum_cache;
Найходим:
include_once ENGINE_DIR.'/forum/classes/parse.class.php';
Добавляем выше:
$forum_groups = $fcache->get('forum_groups');
if (!$forum_groups)
{
$get_forum_groups = $db->query("SELECT * FROM " . USERPREFIX . "_forum_groups ORDER BY group_id ASC");
$forum_groups = array();
while ($row = $db->get_row($get_forum_groups))
{
$forum_groups[$row['group_id']] = array ();
foreach ($row as $key => $value)
{
$forum_groups[$row['group_id']][$key] = $value;
}
}
}
$forum_moderators = $fcache->get('forum_moderators');
if (!$forum_moderators)
{
$get_moderators = $db->query("SELECT * FROM " . USERPREFIX . "_forum_moderators ORDER BY mid ASC");
$forum_moderators = array();
while ($row = $db->get_row($get_moderators))
{
$forum_moderators[$row['mid']] = array();
foreach ($row as $key => $value)
{
$forum_moderators[$row['mid']][$key] = $value;
}
}
$fcache->set('forum_moderators', $forum_moderators);
}
Находим:
if ($id != $row['pid']) die ("error");
Добавляем ниже:
$have_perm = 0;
if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR $forum_moderators[$member_id['user_group']]['edit_post']) ) {
$have_perm = 1;
}
if( ! $have_perm ) die( "error" );
Находим:
elseif ($_REQUEST['action'] == "save")
{
Добавляем ниже:
$row = $db->super_query("SELECT * FROM " . PREFIX . "_forum_posts WHERE `pid` = '$id'");
if ($id != $row['pid']) die ("error");
$have_perm = 0;
if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR $forum_moderators[$member_id['user_group']]['edit_post']) ) {
$have_perm = 1;
}
if( ! $have_perm ) die( "error" );
[/spoiler][spoiler=Версия 2.4]
Открываем файл /engine/forum/ajax/editpost.php
Найти:
include 'init.php';
Добавить ниже:
require_once ENGINE_DIR.'/forum/classes/cache.php';
$fcache = new forum_cache;
Найти:
include_once ENGINE_DIR.'/forum/classes/parse.class.php';
Добавить выше:
$forum_groups = $fcache->get('forum_groups');
if (!$forum_groups)
{
$get_forum_groups = $db->query("SELECT * FROM " . USERPREFIX . "_forum_groups ORDER BY group_id ASC");
$forum_groups = array();
while ($row = $db->get_row($get_forum_groups))
{
$forum_groups[$row['group_id']] = array ();
foreach ($row as $key => $value)
{
$forum_groups[$row['group_id']][$key] = $value;
}
}
}
$forum_moderators = $fcache->get('forum_moderators');
if (!$forum_moderators)
{
$get_moderators = $db->query("SELECT * FROM " . USERPREFIX . "_forum_moderators ORDER BY mid ASC");
$forum_moderators = array();
while ($row = $db->get_row($get_moderators))
{
$forum_moderators[$row['mid']] = array();
foreach ($row as $key => $value)
{
$forum_moderators[$row['mid']][$key] = $value;
}
}
$fcache->set('forum_moderators', $forum_moderators);
}
Найти:
if ($id != $row['pid']) die ("error");
Добавить ниже:
$have_perm = 0;
if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR $forum_moderators[$member_id['user_group']]['edit_post']) ) {
$have_perm = 1;
}
if( ! $have_perm ) die( "error" );
Найти:
elseif ($_REQUEST['action'] == "save")
{
Добавить ниже:
$row = $db->super_query("SELECT * FROM " . PREFIX . "_forum_posts WHERE `pid` = '$id'");
if ($id != $row['pid']) die ("error");
$have_perm = 0;
if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR $forum_moderators[$member_id['user_group']]['edit_post']) ) {
$have_perm = 1;
}
if( ! $have_perm ) die( "error" );
[/spoiler]Автор исправления: ShapeShifter