Мы в твиттере Мы в телеграме!

Провеббер » Web » Полезные статьи » DLE Forum (Правка бага с редактированием поста)

Набор в команду! Ведется набор в команду, для наполнения сайта новым, интересным контентом. Если у тебя есть предложения, свободное время, ты обладаешь интересным контентом, и хочешь поделиться с другими?
Обращайся к нам в ЛС группы Вконтакте.

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

Данный материал предоставлен сайтом 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


Дополнительные ссылки на скачивание ТОЛЬКО для зарегистрированных


-3
Просмотры: 14 487 :: Комментарии (9) :: :: Нужна помощь? Задайте вопрос на форуме ::
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1BeSSeR

  • 7 января 2010 07:58
  • Регистрация: 23.11.2009
  • Был(а) онлайн: 21.01.2017
  • Комментариев: 165
  • 0
На официальном сайте не нашел такого.

--------------------

#2ТорЧок

  • 7 января 2010 10:47
  • Регистрация: 5.01.2010
  • Был(а) онлайн: 5.04.2011
  • Комментариев: 247
  • 0
Цитата: BeSSeR
На официальном сайте не нашел такого.

Во-первых смотрим автора статьи.
Во-вторых Швад слишком ленив и криворук, поэтому багу пофиксили задолго до него.

--------------------

#3Jr

  • 7 января 2010 13:05
  • Регистрация: 12.09.2009
  • Был(а) онлайн: 3.12.2012
  • Комментариев: 46
  • 0
опять получится как с дыркой через восстановления пароля??... хотьбы не говорили дыры.... а хотя..

#4fly5500

  • 7 января 2010 18:01
  • Регистрация: 11.12.2009
  • Был(а) онлайн: 28.05.2013
  • Комментариев: 14
  • 0
А можно подробнее сам способ редактирования комментариев без специальных прав? crazy

#5tiroboy

  • 8 января 2010 00:41
  • Регистрация: 18.12.2009
  • Был(а) онлайн: 13.04.2012
  • Комментариев: 36
  • 0
fly5500
для неправомерных нужд хочешь узнать? )

--------------------

#6Serega12689

  • 15 января 2010 05:35
  • Регистрация: 8.11.2009
  • Был(а) онлайн: 4.06.2010
  • Комментариев: 40
  • 0
Когда на dle появится хороший форум??? Может создатели dle пристроят или версию 3.0 ждать...

#7mpgroup

  • 16 января 2010 14:06
  • Регистрация: 16.01.2010
  • Был(а) онлайн: 7.12.2010
  • Комментариев: 33
  • 0
выбивает ошибку при обращении в базу, типа sytaxis error

#8stemp

  • 12 сентября 2010 16:14
  • Регистрация: 31.05.2010
  • Был(а) онлайн: 21.06.2011
  • Комментариев: 15
  • 0
Спасибо исправил у себя)

#9SoverenG

  • 16 июля 2012 21:36
  • Регистрация: 9.09.2011
  • Был(а) онлайн: 15.11.2014
  • Комментариев: 21
  • 0
И я исправил))Спасибо)

--------------------

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Архив новостей
Ноябрь 2024 (9)
Октябрь 2024 (169)
Сентябрь 2024 (13)
Август 2024 (60)
Июль 2024 (12)
Июнь 2024 (30)

Последние комментарии: