Dleshka.org
Авторизация

Скачать DLE Forum (Правка бага с редактированием поста)

+7
TipTop 8-01-2010 Разное 0 комментариев
Обнаружен баг с редактированием комментариев в DataLife Engine forum v2.3, 2.4


С помощью данного бага можно запросто отредактирвоать любой комментарий без специальных прав, т.е. обычный пользователь может отредактировать комментарий администратора.

Итак инструкция по исправлению бага:

Версия 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" );



Версия 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" );


Автор:ShapeShifter
Информация
Зарегистрируйтесь чтобы комментировать публикацию.
Авторизация