Чтение RSS
По вопросам сотрудничества и рекламы на портале MixliP, обращаться на почту admin@turklib.ru
MixliP - Территория вебмастера! На нашем сайте вы найдете все для веб-мастеров и не только =) ! Различные скрипты для вашего сайта. И еще на нашем сайте немало софта! Заходи не пожалеешь!

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

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



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

Давайте для начала рассмотрим ту защиту, которая собственно и не дает нам свободно скачать файл по прямой ссылке /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!");
}

Оф. сайт: sаndev.prо

Просмотры: 2847 Комментарии (0)
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Владельцы и пользователи сайта MixliP.ru не осуществляют никакой продажи либо перепродажи программных и иных продуктов интеллектуальной собственности. На нашем сайте не хранится ни одного файла или документа, который нарушал бы смежное или авторское право.


Сайт MixliP.ru представляет собой набор новостей и ссылок на внешние общедоступные источники в сети Интернет, не подконтрольные администрации сайта MixliP.ru, а, следовательно, не несет никакой ответственности за их содержание.


Вся информация о программном обеспечении и скриптах, размещенная на данном сайте, предоставлена исключительно в ознакомительных целях и только для просмотра, и призвана помочь посетителям сайта MixliP.ru выбрать для себя и в последствии приобрести соответствующие лицензионные авторские программные продукты.


Читать полностью информацию правообладателям.




Наши друзья

Полезное

Разделы сайта

 Пользователи онлайн

  • Всего на сайте: 11
    Пользователей: 0
    Гостей: 11
    Роботов: 0