Личные сообщения

Ваши переписки

Логотип сайта
главная правила форум опубликовать полезные сервисы услуги
вход или регистрация обратная связь

Мир шаблонов » Полезности, хаки DLE » Доступность - защита файлов в закрытых разделах в DLE
0

Доступность - защита файлов в закрытых разделах в DLE

Доступность - защита файлов в закрытых разделах в DLE


Есть одна лазейка в DLE, которая позволяет скачивать файлы из новости, даже если эта новость находится в скрытом разделе.

В случае, к примеру, с созданием раздела VIP этот вопрос довольно таки актуален.

Давайте для начала рассмотрим ту защиту, которая собственно и не дает нам свободно скачать файл по прямой ссылке /engine/download.php?id=123

Преграда №1.
Настройки групп пользователей. Т.е. скачивать файлы могут только те пользователи, которым это разрешено в настройках группы. Остальные получают ошибку "Access denied".

Преграда №2.
Скорее чисто символическая, защита от не продвинутого пользователя. Проверяется реферер, т.е. файл будет доступен только в том случае, если пользователь кликнул по ссылке на сайте. Но нам же ничего не мешает самому подправить код странички и вставить туда ссылок с любым ID.

А теперь вспомним еще о 2х параметрах, которые так же следовало бы учесть:
Параметр №1.
При добавлении новости, в закладке "доступ" можно определенной группе выставить уровень доступа "запретить просмотр". Но если в новости находится ценный файл который доступен только перечисленным группам, то злоумышленник все равно сможет получить доступ к файлу простым перебором.

Параметр №2.
В настройках групп пользователей в параметре "Доступные разделы" можно перечислить список категорий к которым будет открыт доступ. Получается та же ситуация. Простым методом перебора ID файлов можно будет скачать любой файл, даже не имея доступа в закрытый раздел.


Со вступлением разобрались. Теперь, собственно, решение данной проблемы:

Открыть файл engine/download.php

Найти строку:

$row = $db->super_query ( "SELECT name, onserver FROM " . PREFIX . "_files WHERE id ='$id'" );

Заменить на (Для DLE 9.6 и старше):

$row = $db->super_query ( "SELECT name, onserver, access, category FROM " . PREFIX . "_files f LEFT JOIN ".PREFIX."_post_extras e ON e.news_id=f.news_id LEFT JOIN ".PREFIX."_post p ON f.news_id=p.id WHERE f.id ='$id'" );

if($row['access']){
	$row['access'] = explode(",",$row['access']);
	if(!in_array($member_id['user_group'],$row['access'])) die("Access denied");
}
if($user_group[$member_id['user_group']]['allow_cats'] AND $user_group[$member_id['user_group']]['allow_cats']!='all'){
	$allow_cats = explode(",",$user_group[$member_id['user_group']]['allow_cats']);
	$deny = true;
	if(strpos($row['category'],",")!==false){
		$row['category'] = explode(",",$row['category']);
		foreach($row['category'] as $cat) if(in_array($cat,$allow_cats)) $deny = false;
	}else{
		$row['category'] = intval($row['category']);
		if(in_array($row['category'],$allow_cats)) $deny = false;
	}
	if($deny) die("Access denied!");
}

Для младших версий DLE вставить:

$row = $db->super_query ( "SELECT name, onserver, access, category FROM " . PREFIX . "_files f LEFT JOIN ".PREFIX."_post p ON f.news_id=p.id WHERE f.id ='$id'" );

if($row['access']){
	$row['access'] = explode(",",$row['access']);
	if(!in_array($member_id['user_group'],$row['access'])) die("Access denied");
}
if($user_group[$member_id['user_group']]['allow_cats'] AND $user_group[$member_id['user_group']]['allow_cats']!='all'){
	$allow_cats = explode(",",$user_group[$member_id['user_group']]['allow_cats']);
	$deny = true;
	if(strpos($row['category'],",")!==false){
		$row['category'] = explode(",",$row['category']);
		foreach($row['category'] as $cat) if(in_array($cat,$allow_cats)) $deny = false;
	}else{
		$row['category'] = intval($row['category']);
		if(in_array($row['category'],$allow_cats)) $deny = false;
	}
	if($deny) die("Access denied!");
}

Источник: _http://SanDev.pro/
Поделиться: Понравилась новость? Расскажи друзьям. Поблагодари проект!


Уважаемый посетитель нашего сайта! Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем. Спасибо за внимание!

Тегихаки dle, доступность файлов, защита от скачивания
Публикацию посмотрели 646 раз(а) и написали 0 комментариев.

Похожие публикации

 Вывод количество новостей на главной для DLE 9.x - 10.x 
Хак будет направлен на вывод количества новостей на главной странице DLE: 1. Вывод общего количества новостей; 2. Вывод количества новостей за месяц; 2. Вывод количества новостей за неделю; 2. Вывод количества новостей за день;*...
 Шаблон СSS Template 2.0 для DLE 9.8 [Оригинал] 
Дорогие друзья. После длительного перерыва, команда Российской школы CSS и GZweb Interfaces готова представить Вам обновление шаблона CSS Template 2.0. Он позволит не только изучить современные приемы верстки страниц и разработки сайтов, но и...
 Вывод количества новостей в меню (категориях) для DLE 
Очень полезный хак который позволяет вывести в меню общее количество новостей в категории или подкатегории, а также количество новостей добавленных за сегодня. Единственное, что нужно знать для этого - это id категории....
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
разделы сайта

последние комментарии
  • jimmykoks 09.12.2016
    Maxshop - Store Responsive Ope ... (1)
    jimmykoks-фото
    После установки русского языка вылезли ошибки:
    Notice: Undefined index: title in /home/......./catalog/controller/module/so_newletter_custom_popup.php on line 60
    Notice: Undefined index: newsletter_promo in /home/......./catalog/controller/module/so_newletter_custom_popup.php on line 61
    Notice: Undefined index: title in /home/......./catalog/controller/module/so_newletter_custom_popup.php on line 60
    Notice: Undefined index: newsletter_promo in /home/......./catalog/controller/module/so_newletter_custom_popup.php on line 61
    Не подскажете как исправить?
  • Стас2056 25.11.2016
    ВИДЖЕТПАК 3.0 - 150 лучших вид ... (17)
    Стас2056-фото
    Настоящий адекватный ресурс, где админы и пользователи как одна команда! [right][/right]Спасибо!
  • seriy99 25.11.2016
    Factor - Multipurpose Landing ... (2)
    seriy99-фото
    Цитата: face2005
    архив весь битый

    Ничего не может быть бито! Смотря чем вы распаковуете и учитывайте длину - для этого достаточно переименовать папку с архивом шаблона например на 1 - перед тем как распаковуете, чтоб длина символов не влияла на распаковку, так как в архиве много папок и подпапок.
  • DenJo 24.11.2016
    OpenCart шаблон "StoreFlex" (3)
    DenJo-фото
    хороший шаблон, уже успел с ним поработать. layout builder полезная штука и моим клиентам понравились clients categories.
    жду апдейта)
  • face2005 24.11.2016
    Factor - Multipurpose Landing ... (2)
    face2005-фото
    архив весь битый
поддержать проект
подписаться на новости
OpenCart
Подписаться на канал RSS Добавить сайт в закладки
популярные публикации
партнеры сайта

рекомендуем
Hosting Ukraine
© 2013-2016 mirshablonov.com