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

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

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

Мир шаблонов » Полезности, хаки 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, доступность файлов, защита от скачивания
Публикацию посмотрели 676 раз(а) и написали 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 категории....
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
разделы сайта

последние комментарии
поддержать проект
подписаться на новости
OpenCart
Подписаться на канал RSS Добавить сайт в закладки
популярные публикации
партнеры сайта

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