SavGroup Team > Бесплатные хаки для DLE > DLE Forum (Правка бага с редактированием поста)
DLE Forum (Правка бага с редактированием поста)5 января 2010. Разместил: ShapeShifter |
|
Вот сегодня прочитал на одном форуме, что обнаружен один баг, с помощью которого можно запросто отредактирвоать любой комментарий без специальных прав, т.е. обычный пользователь может отредактировать комментарий администратора.
И самое смешное, что те кто уже успел нагадить на других форумах, благодаря этому багу, решили не раскрывать тайну бага, как будто это нереально сложно понять... Инструкция: Открываем файл /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" ); Открываем файл /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" ); Открываем файл /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; } } } Находим: $row = $db->super_query("SELECT * FROM " . PREFIX . "_forum_posts WHERE `pid` = '$id'"); Заменяем на: $row = $db->super_query("SELECT p.*, t.forum_id, t.tid FROM " . PREFIX . "_forum_posts p, " . PREFIX . "_forum_topics t WHERE p.pid = '$id' AND t.tid = p.topic_id"); Находим: if ($id != $row['pid']) die ("error"); Добавляем ниже: $have_perm = 0; $get_forum = $db->super_query("SELECT * FROM " . PREFIX . "_forum_forums WHERE id = '$row[forum_id]'"); $value = explode(":", $get_forum['access_mod']); $check = in_array($member_id['user_group'], $value); $check_e = false; $check_n = false; if (!$check and $get_forum['moderators']) { $moderators = explode(":", $get_forum['moderators']); $check = in_array($member_id['user_id'], $moderators); $check_n = true; } if ($check) $check_e = true; if (!$check_n) $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE group_id = '$member_id[user_group]'"); else $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE member_name = '$member_id[name]'"); if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR ($check_e AND $get_moder['edit_post'])) ) { $have_perm = 1; } if( ! $have_perm ) die( "error" ); Находим: elseif ($_REQUEST['action'] == "save") { Добавляем ниже: $row = $db->super_query("SELECT p.*, t.forum_id, t.tid FROM " . PREFIX . "_forum_posts p, " . PREFIX . "_forum_topics t WHERE p.pid = '$id' AND t.tid = p.topic_id"); if ($id != $row['pid']) die ("error"); $have_perm = 0; $get_forum = $db->super_query("SELECT * FROM " . PREFIX . "_forum_forums WHERE id = '$row[forum_id]'"); $value = explode(":", $get_forum['access_mod']); $check = in_array($member_id['user_group'], $value); $check_e = false; $check_n = false; if (!$check and $get_forum['moderators']) { $moderators = explode(":", $get_forum['moderators']); $check = in_array($member_id['user_id'], $moderators); $check_n = true; } if ($check) $check_e = true; if (!$check_n) $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE group_id = '$member_id[user_group]'"); else $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE member_name = '$member_id[name]'"); if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR ($check_e AND $get_moder['edit_post'])) ) { $have_perm = 1; } if( ! $have_perm ) die( "error" ); Открываем файл /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; } } } Найти: $row = $db->super_query("SELECT * FROM " . PREFIX . "_forum_posts WHERE pid = $id"); Заменить на: $row = $db->super_query("SELECT p.*, t.forum_id, t.tid FROM " . PREFIX . "_forum_posts p, " . PREFIX . "_forum_topics t WHERE p.pid = '$id' AND t.tid = p.topic_id"); Найти: if ($id != $row['pid']) die ("error"); Добавить ниже: $have_perm = 0; $get_forum = $db->super_query("SELECT * FROM " . PREFIX . "_forum_forums WHERE id = '$row[forum_id]'"); $value = explode(":", $get_forum['access_mod']); $check = in_array($member_id['user_group'], $value); $check_e = false; $check_n = false; if (!$check and $get_forum['moderators']) { $moderators = explode(":", $get_forum['moderators']); $check = in_array($member_id['user_id'], $moderators); $check_n = true; } if ($check) $check_e = true; if (!$check_n) $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE group_id = '$member_id[user_group]'"); else $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE member_name = '$member_id[name]'"); if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR ($check_e AND $get_moder['edit_post'])) ) { $have_perm = 1; } if( ! $have_perm ) die( "error" ); Найти: elseif ($_REQUEST['action'] == "save") { Добавить ниже: $row = $db->super_query("SELECT p.*, t.forum_id, t.tid FROM " . PREFIX . "_forum_posts p, " . PREFIX . "_forum_topics t WHERE p.pid = '$id' AND t.tid = p.topic_id"); if ($id != $row['pid']) die ("error"); $have_perm = 0; $get_forum = $db->super_query("SELECT * FROM " . PREFIX . "_forum_forums WHERE id = '$row[forum_id]'"); $value = explode(":", $get_forum['access_mod']); $check = in_array($member_id['user_group'], $value); $check_e = false; $check_n = false; if (!$check and $get_forum['moderators']) { $moderators = explode(":", $get_forum['moderators']); $check = in_array($member_id['user_id'], $moderators); $check_n = true; } if ($check) $check_e = true; if (!$check_n) $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE group_id = '$member_id[user_group]'"); else $get_moder = $db->super_query("SELECT edit_post FROM " . PREFIX . "_forum_moderators WHERE member_name = '$member_id[name]'"); if( $is_logged and (($member_id['name'] == $row['post_author'] and $row['is_register'] and $forum_groups[$member_id['user_group']]['post_edit']) OR ($check_e AND $get_moder['edit_post'])) ) { $have_perm = 1; } if( ! $have_perm ) die( "error" ); Автор исправления: ShapeShifter (SaVGroup.ru) При копировании материала, указание автора и ссылка на сайт разработчика обязательна. Вернуться назад |